1#line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
13 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
22 #if !defined(ELC_BASE)
25 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
34 #if !defined(ELC_BASE_DEFS)
36 #define __builtin_is_my_dick_still_there() true
41 #include <type_traits>
46 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
56 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
79 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
81 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
89 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
101 #if !defined(ELC_WARNING_LEVEL)
102 #define ELC_WARNING_LEVEL 4
105 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
116 #define BIT_POSSIBILITY 2
120 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
122 #if defined(_MSC_VER)
123 #pragma warning(push,ELC_WARNING_LEVEL)
124 #pragma warning(disable:4099)
125 #pragma warning(disable:26812)
126 #pragma warning(disable:4584)
127 #pragma warning(disable:4250)
128 #pragma warning(disable:26432)
129 #pragma warning(disable:26435)
130 #pragma warning(disable:26481)
131 #pragma warning(disable:26446)
132 #pragma warning(disable:26434)
133 #pragma warning(disable:26429)
134 #pragma warning(disable:26471)
135 #pragma warning(disable:26474)
136 #pragma warning(disable:26473)
137 #pragma warning(disable:26456)
138 #pragma warning(disable:26485)
139 #pragma warning(disable:26490)
140 #pragma warning(disable:26472)
141 #pragma warning(disable:26482)
142 #pragma warning(disable:26493)
144 #if defined(_MSC_VER)
145 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
146 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
147 #define push_msvc_warning() __pragma(warning(push))
148 #define pop_msvc_warning() __pragma(warning(pop))
149 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
151 #define suppress_msvc_warning(...)
152 #define disable_msvc_warning(...)
153 #define push_msvc_warning()
154 #define pop_msvc_warning()
155 #define push_and_disable_msvc_warning(...)
158 #if defined(ELC_VOID_NAME)
163 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
164 #define noexcept_as_auto MAGIC
165 #define constexpr_as(...) MAGIC constexpr
166 #define constexpr_as_auto MAGIC MAGIC constexpr
168 #define using_method_from_base_t(name,...) \
169 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
170 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
172 return base_t::name(forward<Args>(rest)...);\
175 #define using_method_from_value(name,value_name,...) \
176 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
177 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
179 return value_name.name(forward<Args>(rest)...);\
182 #define floop while(__builtin_is_my_dick_still_there())
183 #define enable_adl(name) void name()noexcept=delete
185 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
186 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
188 #define declvalue(...) (::std::declval<__VA_ARGS__>())
191 #define template_error(reason) static_assert(template_error_helper<T>,reason)
193 #define template_warning(reason) template_warning_helper<T>(reason)
196 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
197 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
199 #define is_common_attribute(name) public attribute<T,name<T>>
200 #define is_special_attribute(name) public attribute<T,name>
202 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
203 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
206 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
208 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
211 #define def_common_attribute_with_nothing(name) \
212 template<typename T>\
215 #define def_special_attribute_with_nothing(name) \
218 #define common_attribute_t template<class>class
219 #define special_attribute_t class
229 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
231 #define enabled_by_default class enable_state=void
233 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
235 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
237 #define enable_flag class enable_state
239 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
240 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
241 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
242 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
243 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
246 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
248 #define get_recursive_lambda_caller(name) \
249 lambda_with_catch(&)(auto&&...Args){\
250 return name(name,Args...);\
255 #define lambda_with_catch(...) [__VA_ARGS__]
257 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
259 #define lambda_RLSRRS _my_jb_super_sb_name_
267 #define elseif else if
271 #define _small_than_ <
273 #if defined(_MSC_VER)
280 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
282 #define BREAK_NAMESPACE }
285 #define template_name template
287 #define type_name class
289 #if defined(DEBUG) || defined(_DEBUG)
290 #define not_in_debug 0
292 #define not_in_debug 1
296 #define ec(ch) U ## ch
298 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
299 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
301 #define ELC_TEST_EVENTNAME(name)
304 #define override_instance_struct \
306 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
307 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
308 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
309 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
310 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
313 #define distinctive __declspec(dllexport)
319 #define force_inline __forceinline
320 #elif defined(__GNUC__)
321 #define force_inline __attribute__((always_inline)) inline
323 #define force_inline inline
327 #define with_no_vtable __declspec(novtable)
329 #define with_no_vtable
332 #define in_consteval (::std::is_constant_evaluated())
334 #define no_vtable_struct struct with_no_vtable
335 #define no_vtable_class class with_no_vtable
339 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
343 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
346 using namespace base;
349 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
351 inline void check_memory_lack()noexcept;
353 ~memory_lack_checker_t(){
356 }memory_lack_checker{};
361 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
371 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/template_helper.hpp"
388 template<
class T,
class U>
389 [[deprecated(
"this was a template warning."),nodiscard]]
394 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
395 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/using_std.hpp"
409 using ::std::forward;
410 using ::std::addressof;
431 template<
bool B,
class T,
class F>
434 using ::std::partial_ordering;
435 using ::std::weak_ordering;
436 using ::std::strong_ordering;
440 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
441 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/concept.hpp"
455 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
456 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/magic_number.hpp"
465 namespace magic_number{
472 constexpr auto gold=0.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788067520876689250171169620703222104321626954862629631361443814975870122034080588795445474924618569536486444924104432077134494704956584678850987433944221254487706647809158846074998871240076521705751797883416625624940758906970400028121042762177111777805315317141011704666599146697987317613560067087480710131795236894275219484353056783002287856997829778347845878228911097625003026961561700250464338243776486102838312683303724292675263116533924731671112115881863851331620384005222165791286675294654906811317159934323597349498509040947621322298101726107059611645629909816290555208524790352406020172799747175342777592778625619432082750513121815628551222480939471234145170223735805772786160086883829523045926478780178899219902707769038953219681986151437803149974110692608867429622675756052317277752035361393621076738937645560606059216589466759551900400555908950229530942312482355212212415444006470340565734797663972394949946584578873039623090375033993856210242369025138680414577995698122445747178034173126453220416397232134044449487302315417676893752103068737880344170093954409627955898678723209512426893557309704509595684401755519881921802064052905518934947592600734852282101088194644544222318891319294689622002301443770269923007803085261180754519288770502109684249362713592518760777884665836150238913493333122310533923213624319263728910670503399282265263556209029798642472759772565508615487543574826471814145127000602389016207773224499435308899909501680328112194320481964387675863314798571911397815397807476150772211750826945863932045652098969855567814106968372884058746103378105444390943683583581381131168993855576975484149144534150912954070050194775486163075422641729394680367319805861833918328599130396072014455950449779212076124785645916160837059498786006970189409886400764436170933417270919143365013715;
478 constexpr auto pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009;
481 constexpr auto e = 2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901157383418793070215408914993488416750924476146066808226480016847741185374234544243710753907774499206955170276183860626133138458300075204493382656029760673711320070932870912744374704723069697720931014169283681902551510865746377211125238978442505695369677078544996996794686445490598793163688923009879312773617821542499922957635148220826989519366803318252886939849646510582093923982948879332036250944311730123819706841614039701983767932068328237646480429531180232878250981945581530175671736133206981125099618188159304169035159888851934580727386673858942287922849989208680582574927961048419844436346324496848756023362482704197862320900216099023530436994184914631409343173814364054625315209618369088870701676839642437814059271456354906130310720851038375051011574770417189861068739696552126715468895703503540212340784981933432106817012100562788023519303322474501585390473041995777709350366041699732972508868769664035557071622684471625607988265178713419512466520198918006308407507245458379639351364421067750539471789004518357551541252235905906872648786357525419112888773717663748602766063496035367947026923229718683277173932361920077745221262475186983349515101986426988784717193966497690708252174233656627259284406204302141137199227852699846988477023238238400556555178890876613601304770984386116870523105531491625172837327286760072481729876375698163354150746088386636406934704372066886512756882661497307886570156850169186474885416791545965072342877306998537139043002665307839877638503238182155355973235306860430106757608389086270498418885951380910304235957824951439885901131858358406674723702971497850841458530857813391562707603563907639473114554958322669457024941398316343323789759556808568362972538679132750555425244919435891284050452269538121791319145135009938463117740179715122837854601160359554028644059;
486 template<
typename T> requires ::std::is_arithmetic_v<T>
488 if constexpr(::std::is_signed_v<T>){
489 if constexpr(::std::is_floating_point_v<T>)
490 return ::std::signbit(x);
498 template<
typename T> requires ::std::is_arithmetic_v<T>
500 if constexpr(::std::is_signed_v<
decltype(x)>){
501 if constexpr(::std::is_floating_point_v<
decltype(x)>)
502 return(T)::std::copysign(x,negative?-1:1);
504 return(T)negative?T{}-x:x;
510 return copy_as_negative<decltype(x)>(x,negative);
513 template<
typename T> requires ::std::is_arithmetic_v<T>
515 if constexpr(::std::is_floating_point_v<T>)
516 return (
size_t)(ptrdiff_t)x;
521 template<
typename T> requires ::std::is_arithmetic_v<T>
523 if constexpr(::std::is_floating_point_v<T>)
524 return (::std::uintmax_t)(::std::intmax_t)x;
526 return (::std::uintmax_t)x;
529 template<
typename T1,
typename T2> requires ::std::is_arithmetic_v<T1> and ::std::is_arithmetic_v<T2>
531 if constexpr(::std::is_floating_point_v<T1>||::std::is_floating_point_v<T2>)
532 return ::std::fmod(a,b);
539 if constexpr(::std::is_floating_point_v<T>)
540 ::std::fesetround(mode);
545 if constexpr(::std::is_floating_point_v<T>)
546 return ::std::fegetround();
556 set_rounding<T>(new_rounding);
564 template<
class T> requires ::std::is_unsigned_v<T>
565 [[nodiscard]]
force_inline constexpr auto rotl_nomod(
const T v,
const auto R)
noexcept;
568 template<
class T> requires ::std::is_unsigned_v<T>
570 constexpr auto d = ::std::numeric_limits<T>::digits;
571 if constexpr(::std::is_unsigned_v<
decltype(r)>){
573 return static_cast<T
>(
static_cast<T
>(v >> r) |
static_cast<T
>(v << (d - r)));
579 return static_cast<T
>(
static_cast<T
>(v >> r) |
static_cast<T
>(v << (d - r)));
588 template<
class T> requires ::std::is_unsigned_v<T>
590 constexpr auto d = ::std::numeric_limits<T>::digits;
591 if constexpr(::std::is_unsigned_v<
decltype(r)>){
593 return static_cast<T
>(
static_cast<T
>(v << r) | static_cast<T>(v >> (d - r)));
599 return static_cast<T
>(
static_cast<T
>(v << r) | static_cast<T>(v >> (d - r)));
608 template<
class T> requires ::std::is_unsigned_v<T>
610 constexpr auto d = ::std::numeric_limits<T>::digits;
611 const auto r =
mod(R,d);
616 template<
class T> requires ::std::is_unsigned_v<T>
618 constexpr auto d = ::std::numeric_limits<T>::digits;
619 const auto r =
mod(R,d);
622 template<
class T> requires ::std::is_arithmetic_v<T>
624 static constexpr auto rot_offset_npos = ::std::numeric_limits<T>::digits;
630 if(_offset==rot_offset_npos)
636 _offset=rot_offset_npos;
656 template<
class T> requires ::std::is_unsigned_v<T>
662 template<
class T> requires ::std::is_unsigned_v<T>
668 template<
class T> requires ::std::is_unsigned_v<T>
674 template<
class T> requires ::std::is_unsigned_v<T>
679 template<
class T> requires ::std::is_arithmetic_v<T>
681 if constexpr(::std::is_signed_v<T>)
687 template<
class T> requires ::std::is_arithmetic_v<T>
689 return abs(a-b)<=::std::numeric_limits<T>::epsilon();
694 if constexpr(::std::is_arithmetic_v<T1>&&::std::is_arithmetic_v<T2>){
695 if constexpr(::std::is_floating_point_v<T1>||::std::is_floating_point_v<T2>)
698 using signedT = ::std::make_signed_t<::std::common_type_t<T1,T2>>;
699 return static_cast<signedT
>(a)-
static_cast<signedT
>(b);
707 template<
class T> requires ::std::is_floating_point_v<T>
710 typedef decltype(::std::exp(v)) RT;
711 auto exp_impl =
recursive_lambda(RT x,RT sum,RT n,
size_t i,RT t)
noexcept -> RT{
712 const auto epsilon=sum+t/n;
719 return exp_impl_caller(RT{v},RT{1},RT{1},2,RT{v});
722 return ::std::exp(v);
726 template<
class T> requires ::std::is_arithmetic_v<T>
729 typedef decltype(::std::log(a)) RT;
731 auto log_iter =
lambda(RT x,RT y)
noexcept{
732 const auto exp_y =
exp(y);
733 return y + T{2}*(x-exp_y)/(x+exp_y);
738 return log_impl_caller((RT)a,RT{0});
741 return ::std::log(a);
743 template<
class T,
class U> requires ::std::is_arithmetic_v<T> && ::std::is_arithmetic_v<U>
749 template<
class T,
class U>
requires (::std::is_arithmetic_v<T> && ::std::is_arithmetic_v<U>)
752 typedef decltype(::std::pow(a,b)) RT;
753 return exp(RT(b)*
log(RT(a)));
756 return ::std::pow(a,b);
760 template<
class T> requires ::std::is_floating_point_v<T>
763 typedef decltype(::std::trunc(v)) RT;
764 return static_cast<RT
>((::std::intmax_t)v);
767 return ::std::trunc(v);
771 template<
class T> requires ::std::is_floating_point_v<T>
774 typedef decltype(::std::ceil(v)) RT;
775 auto ceil_impl =
lambda(T x, T y)
noexcept{
776 return feq(x,y) ? y : y+T{1};
781 return ::std::ceil(v);
785 template<
class T> requires ::std::is_arithmetic_v<T>
788 if constexpr(::std::is_floating_point_v<T>)
810 T b=
static_cast<T
>(::std::sqrt(a));
823 if((!
mod(a,c))||(!
mod(a,(c+2))))
837 template<
class T> requires ::std::is_arithmetic_v<T>
839 if constexpr(::std::is_floating_point_v<T>)
864 namespace linear_interpolation{
865 [[nodiscard]]
inline constexpr auto get_k(
auto y1,
auto y2,
auto δx)
noexcept{
870 [[nodiscard]]
inline constexpr auto get_k(
auto y1,
auto y2)
noexcept{
871 return get_k(y1,y2,1.0);
873 [[nodiscard]]
inline constexpr auto get_result(
auto y1,
auto k,
auto δx)
noexcept{
906 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
908 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/other.hpp"
919 template<
typename T,
typename U>
939 template_error(
"Please overload the function the_destroy in the namespace where this type is defined.");
944 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
946 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/cast.hpp"
962 inline constexpr const T
add_const(T a)
noexcept{
return a;}
965 inline constexpr const T&
add_const(T&a)
noexcept{
return a;}
968 inline constexpr T&
remove_const(
const T&a)
noexcept{
return const_cast<T&
>(a);}
971 inline constexpr const T*
add_const(T*a)
noexcept{
return a;}
974 inline constexpr T*
remove_const(
const T*a)
noexcept{return ::std::launder(
const_cast<T*
>(a));}
976 template<
typename T,
typename U>
977 inline constexpr T
down_cast(U a)
noexcept{
return static_cast<T
>(a);}
982 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
983 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/special_flags.hpp"
993 #define defspecflag(name)\
994 constexpr struct name##_t{} name{}
1003 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1004 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/non_Xable.hpp"
1050 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1051 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/attribute.hpp"
1060 template<
class T,
typename attribute_name>
1063 template<
class U,special_attribute_t another_attribute_name>
1065 constexpr T*
get_handle()noexcept{
return down_cast<T*>(down_cast<attribute_name*>(
this));}
1067 template<
class U,special_attribute_t another_attribute_name>
1069 constexpr const T*
get_handle()const noexcept{
return down_cast<const T*>(down_cast<const attribute_name*>(
this));}
1071 template<
class T,special_attribute_t attribute_name>
1073 template<
class T,special_attribute_t attribute_name>
1076 template<
class T,common_attribute_t attribute_name>
1078 template<
class T,common_attribute_t attribute_name>
1079 const T*
get_handle(
const attribute<T,attribute_name<T>>*a)
noexcept{
return get_handle<T,attribute_name<T>>(a);}
1081 template<special_attribute_t attribute_name,
class T>
1083 return static_cast<attribute_name*
>(ptr);
1085 template<special_attribute_t attribute_name,
class T>
1087 return static_cast<const attribute_name*
>(ptr);
1089 template<common_attribute_t attribute_name,
class T>
1091 return attribute_ptr_cast<attribute_name<remove_cvref<T>>>(ptr);
1094 template<special_attribute_t attribute_name,
class T>
1096 return*attribute_ptr_cast<attribute_name>(&t);
1098 template<common_attribute_t attribute_name,
class T>
1100 return*attribute_ptr_cast<attribute_name>(&t);
1117 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1118 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/special_attribute.hpp"
1132 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1133 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/type_info.hpp"
1146 const ::std::type_info*
_m;
1148 constexpr type_id_t(const ::std::type_info&a)
noexcept:
_m(&a){}
1149 constexpr type_id_t(
const type_id_t&a)
noexcept=
default;
1150 [[nodiscard]]
type_name_t get_name()
const noexcept;
1151 [[nodiscard]]
size_t get_hash()
const noexcept{
1152 return _m->hash_code();
1154 [[nodiscard]]
bool operator==(
const type_id_t&a)
const noexcept{
return *
_m==*a._m;}
1161 [[nodiscard]]
type_name_t get_name()const noexcept;
1162 [[nodiscard]]
size_t get_hash()const noexcept{
1163 return _tid.get_hash();
1166 [[nodiscard]]
bool operator==(const ::std::type_info&a)
const noexcept{
return _tid==type_id_t(a);}
1173 static constexpr bool same_as=::std::is_same_v<T,U>;
1175 static constexpr bool not_same_as=!same_as<U>;
1179 static constexpr bool not_base_on=!base_on<U>;
1182 static constexpr bool can_convert_to=::std::is_convertible_v<T,U>;
1184 static constexpr bool can_t_convert_to=!can_convert_to<U>;
1186 static constexpr bool can_nothrow_convert_to=::std::is_nothrow_convertible_v<T,U>;
1188 static constexpr bool can_t_nothrow_convert_to=!can_nothrow_convert_to<U>;
1197 template<special_attribute_t attribute_name>
1199 return base_on<attribute_name>;
1201 template<common_attribute_t attribute_name>
1203 return has_attribute_helper<attribute_name<remove_cvref<T>>>();
1205 template<special_attribute_t attribute_name>
1207 return!has_attribute_helper<attribute_name>();
1209 template<common_attribute_t attribute_name>
1211 return!has_attribute_helper<attribute_name>();
1239 [[nodiscard]]
type_name_t get_name()const noexcept;
1240 [[nodiscard]]
size_t get_hash()const noexcept{
1250 template<
class T,
class U>
1270 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1271 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/min_max.hpp"
1291 template<
class...Args>
1294 template<
typename T>
1297 template<
class...Args>
requires able<Args...>
1299 return ::std::min(forward<Args>(rest)...);
1301 template<
class T>
requires able<::std::initializer_list<T>>
1302 [[nodiscard]]
constexpr auto operator()(::std::initializer_list<T>l)
const{
1303 return ::std::min(l);
1305 template<
typename T>
requires get_limit_able<T>
1307 return ::std::numeric_limits<T>::min();
1319 template<
class...Args>
1322 template<
typename T>
1325 template<
class...Args>
requires able<Args...>
1327 return ::std::max(forward<Args>(rest)...);
1329 template<
class T>
requires able<::std::initializer_list<T>>
1330 [[nodiscard]]
constexpr auto operator()(::std::initializer_list<T>l)
const{
1331 return ::std::max(l);
1333 template<
typename T>
requires get_limit_able<T>
1335 return ::std::numeric_limits<T>::max();
1341 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1342 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/null_ptr.hpp"
1351 namespace null_ptr_n{
1366 template<
typename T>
1369 constexpr auto null_as_T =
static_cast<T*
>(
nullptr);
1373 template_error(
"please overload the function the_get_null_ptr in the namespace where this type is defined.");
1385 template<
typename T>
1387 template<
typename T>
1388 [[nodiscard]]
constexpr_as(base_get<T>())operator T*()const noexcept{
return down_cast<T*>(base_get<T>());}
1392 template<
typename T,
typename U=
decltype(*null_ptr.
base_get<T>())>
1405 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1406 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/compare.hpp"
1444 template<
class T,
class U=T>
1446 template<
class T,
class U=T>
1449 template<
typename T,
typename U>
1450 [[nodiscard]]
constexpr auto operator()(T&&a,U&&b)
const noexcept(nothrow<T,U>){
1453 template<
typename T,
typename U>
1454 [[nodiscard]]
constexpr bool operator()(T*a,U*b,
size_t size)
const noexcept(nothrow<T,U>){
1461 template<
typename T,
typename U,
size_t N1,
size_t N2>
1462 [[nodiscard]]
constexpr bool operator()(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1463 if constexpr(N1==N2)
1464 return operator()(a,b,N1);
1470 template<
typename T,
typename U>
1471 [[nodiscard]]
constexpr bool operator()(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1473 return operator()(a,b,size1);
1477 template<
typename T,
typename U>
1480 if(*a!=*b || *b==U{0})
1487 template<
typename T,
typename U>
1491 template<
typename T,
typename U>
1502 template<
typename T,
typename U>
1505 if(*a!=*b || *b==U{0})
1515 template<
typename T>
1519 template<
typename T>
1553 template<
class T,
class U=T>
1556 template<
class T,
class U=T>
1557 static constexpr bool able= r_able<T,U> ||
1563 template<
class T,
class U=T>
1572 template<
class T,
class U>
1573 [[nodiscard]]
static constexpr auto base_call(T&&a,U&&b)
noexcept(nothrow<T,U>){
1575 if constexpr(r_able<T,U>)
1577 else return a == b ? partial_ordering::equivalent :
1578 a < b ? partial_ordering::less :
1579 b < a ? partial_ordering::greater :
1580 partial_ordering::unordered ;
1583 template<
class T,
class U=T>
1586 template<
typename T,
typename U>
1587 [[nodiscard]]
constexpr auto operator()(T&&a,U&&b)
const noexcept(nothrow<T,U>){
1588 return base_call(a,b);
1590 template<
typename T,
typename U>
1591 [[nodiscard]]
constexpr auto operator()(T*a,U*b,
size_t size)
const noexcept(nothrow<T,U>){
1593 if(
auto tmp=base_call(*(a++),*(b++)); tmp!=0)
1596 return strong_ordering::equivalent;
1598 template<
typename T,
typename U,
size_t N1,
size_t N2>
1599 [[nodiscard]]
constexpr auto operator()(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1600 if constexpr(N1==N2)
1601 return operator()(a,b,N1);
1607 template<
typename T,
typename U>
1608 [[nodiscard]]
constexpr auto operator()(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1613 return operator()(a,b,size1);
1615 template<
typename T,
typename U>
1617 type<T,U> tmp=strong_ordering::equivalent;
1620 return strong_ordering::greater;
1622 tmp=base_call(*a,*b);
1626 return *b==U{0}?tmp:strong_ordering::less;
1628 template<
typename T,
typename U>
1630 type<T,U> tmp=strong_ordering::equivalent;
1633 return strong_ordering::less;
1635 tmp=base_call(*a,*b);
1639 return *b==U{0}?tmp:strong_ordering::less;
1641 template<
typename T,
typename U>
1643 type<T,U> tmp=strong_ordering::equivalent;
1646 return *b==U{0}?tmp:strong_ordering::less;
1648 tmp=base_call(*a,*b);
1653 template<
typename T,
typename U>
1655 type<T,U> tmp=strong_ordering::equivalent;
1658 return strong_ordering::greater;
1660 tmp=base_call(*a,*b);
1666 template<
typename T,
typename U>
1667 [[nodiscard]]
constexpr auto lexicographical(T*a,
size_t size1,U*b,
size_t size2)
const noexcept(nothrow<T,U>){
1668 if(
auto tmp=
operator()(a,b,
min(size1,size2)); tmp!=0)
1671 return size1<=>size2;
1673 template<
typename T,
typename U,
size_t N1,
size_t N2>
1674 [[nodiscard]]
constexpr auto lexicographical(T(&a)[N1],U(&b)[N2])
const noexcept(nothrow<T,U>){
1675 return lexicographical(a,N1,b,N2);
1677 template<
typename T,
typename U>
1681 return strong_ordering::greater;
1682 if(
auto tmp=base_call(*a,*b); tmp!=0)
1687 return *b==U{0}?strong_ordering::equivalent:
1688 strong_ordering::less;
1690 template<
typename T,
typename U>
1694 return strong_ordering::less;
1695 if(
auto tmp=base_call(*a,*b); tmp!=0)
1700 return *b==U{0}?strong_ordering::equivalent:
1701 strong_ordering::less;
1703 template<
typename T,
typename U>
1707 return *b==U{0}?strong_ordering::equivalent:
1708 strong_ordering::less;
1709 if(
auto tmp=base_call(*a,*b); tmp!=0)
1715 template<
typename T,
typename U>
1719 return strong_ordering::greater;
1720 if(
auto tmp=base_call(*a,*b); tmp!=0)
1725 return strong_ordering::equivalent;
1728 [[nodiscard]]
constexpr auto reverse(partial_ordering odr)
const noexcept{
1729 if(odr==partial_ordering::greater)
1730 return partial_ordering::less;
1731 elseif(odr==partial_ordering::less)
1732 return partial_ordering::greater;
1736 [[nodiscard]]
constexpr auto reverse(weak_ordering odr)
const noexcept{
1737 if(odr==weak_ordering::greater)
1738 return weak_ordering::less;
1739 elseif(odr==weak_ordering::less)
1740 return weak_ordering::greater;
1744 [[nodiscard]]
constexpr auto reverse(strong_ordering odr)
const noexcept{
1745 if(odr==strong_ordering::greater)
1746 return strong_ordering::less;
1747 elseif(odr==strong_ordering::less)
1748 return strong_ordering::greater;
1756 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1757 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/note.hpp"
1767 #define def_note(name)\
1768 template<typename T>\
1771 force_inline constexpr name##_t(T a):value(a){}\
1773 force_inline constexpr name##_t(name##_t<U>a):value(a.value){}\
1774 force_inline constexpr operator T(){return value;}\
1775 force_inline constexpr T operator()(){return value;}\
1777 template<typename T>\
1778 constexpr name##_t<T>name(T v){return{v};}
1787 namespace note=note_n;
1791 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1792 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/array_like.hpp"
1801 namespace array_like_n{
1804 template<
class T,
size_t N>
1811 template<
class T,
size_t N>
1832 template<
class T,
class U>
1835 begin_of_array_like<T>(v);
1836 size_of_array_like<T>(v);
1850 template<
class U>
requires is_array_like_for<T,U>
1855 swap(_begin,b._begin);
1856 swap(_size,b._size);
1860 [[nodiscard]]
constexpr size_t size()const noexcept{
return _size;}
1870 [[nodiscard]]
constexpr bool empty()const noexcept{
return size();}
1872 [[nodiscard]]
constexpr T&
operator[](
size_t pos)
noexcept{
return begin()[pos];}
1876 return compare(_begin,_size,a._begin,a._size);
1879 return equal(_begin,_size,a._begin,a._size);
1882 template<
typename T>
1885 using base_t::base_t;
1888 if(*ptr)
return get_length_of(ptr+1)+1;
1916 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1917 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/data.hpp"
1929 template<
class T> requires ::std::is_integral_v<T>
1942 [[nodiscard]]
constexpr T&
data_cast(
byte*p){
return*::std::launder(
reinterpret_cast<T*
>(p));}
1948 [[nodiscard]]
constexpr byte*
cast_to_data(T*p){return ::std::launder(
reinterpret_cast<byte*
>(p));}
1954 [[nodiscard]]
constexpr const byte*
cast_to_data(
const T*p){return ::std::launder(
reinterpret_cast<const byte*
>(p));}
1961 template<
class...Ts>
1964 alignas(
max({
alignof(Ts)...}))
1965 byte _data[
max({
sizeof(Ts)...})];
1966 constexpr operator byte*(){
return _data;}
1996 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
1997 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/pointer.hpp"
2010 template<
typename T>
2021 template<
typename T>
2054 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2055 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/hash.hpp"
2072 return _value==a._value;
2096 if constexpr(is_pointer<T>)
2098 elseif constexpr(is_fundamental_hash<T>)
2100 elseif constexpr(is_unstable_hash<T>)
2103 return noexcept(
declvalue(
const T&).hash());
2106 elseif constexpr(type_info<remove_cv<T>> == type_info<base_type_info_t>)
2112 static constexpr bool nothrow=nothrow_helper<T>();
2115 if constexpr(is_pointer<T>)
2117 elseif constexpr(is_fundamental_hash<T>)
2119 elseif constexpr(is_unstable_hash<T>)
2125 elseif constexpr(type_info<remove_cv<T>> == type_info<base_type_info_t>)
2131 static constexpr bool able=able_helper<T>();
2133 #define hash operator()
2139 return{a.get_hash()};
2141 template<
class T>
requires able<T>
2144 if constexpr(is_pointer<T>)
2146 elseif constexpr(is_fundamental_hash<T>)
2148 elseif constexpr(is_unstable_hash<T>)
2155 template_error(
"Please overload the function hash in the namespace where this type is defined.");
2158 #define hash operator()
2162 return hash(a)._value;
2169 rot_iterator<
decltype(aret)>rotl_offset = before_size+size;
2171 aret ^= rotl(get_hash_in_base_type(a[size]),rotl_offset);
2188 size=size%bitnumof_void;
2189 if(value._value==0 || size==0)
2191 if(size >= bit_range_max){
2193 aret = is_npos?npos_hash:void_hash;
2194 size-=bit_range_max;
2201 aret ^= rotl(value._value,rotl_offset);
2209 return repeat_times(
hash(value),size);
2212 [[nodiscard]]
constexpr inline hash_value_t hash(
const T*a,
size_t size)
const noexcept(nothrow<const T>){
2213 return with_calculated_before(
hash(
nothing),0,a,size);
2219 return{before.
_value^(rotl(after._value,before_size))};
2221 template<
class T>
requires is_not_signal_value_for_array_like<T>
2223 return hash(a.begin(),a.size());
2225 template<
class T>
requires is_not_signal_value_for_array_like<T>
2227 return with_calculated_before(before,before_size,a.begin(),a.size());
2242 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2243 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/range.hpp"
2255 template<
typename T>
2259 constexpr range_t(
const T begin,
const T end):_begin(begin),_end(
end){}
2265 constexpr size_t size()noexcept{
return _end-_begin;}
2266 constexpr auto end()noexcept{
return _end;}
2267 constexpr auto begin()noexcept{
return _begin;}
2268 constexpr auto end()const noexcept{
return _end;}
2269 constexpr auto begin()const noexcept{
return _begin;}
2271 template <
class U>
requires(type_info<T>.can_convert_to<U>)
2272 constexpr operator range_t<U>()
const noexcept(type_info<T>.can_nothrow_convert_to<U>){
2273 return {_begin,_end};
2278 [[nodiscard]]
inline auto size_of_array_like(
range_t<T*>&a)
noexcept{
return a.size();}
2283 [[nodiscard]]
inline auto begin_of_array_like(
range_t<T*>&a)
noexcept{
return a.begin();}
2289 template<
typename T>
2291 return bool(pattern>=range.begin() && pattern<range.end());
2295 template<
typename T>
2302 template<
typename T>
2307 size_t skip_table[number_of_possible_values_per<index_type>]{};
2308 size_t radical_skip_table[number_of_possible_values_per<index_type>]{};
2309 index_type pre_index_table[number_of_possible_values_per<index_type>]{};
2312 return index_type(
hash(ch) % number_of_possible_values_per<index_type>);
2315 const size_t m=pattern.size();
2318 for(
size_t i=0;i<number_of_possible_values_per<index_type>;i++){
2319 skip_table[i]=radical_skip_table[i]=m;
2321 skip_table[get_index_of(pattern[0])]=radical_skip_table[get_index_of(pattern[0])]=m-1;
2322 for(
size_t i=1;i<m-1;i++){
2324 radical_skip_table[index]=skip_table[index];
2325 skip_table[index]=m-i-1;
2326 pre_index_table[index]=get_index_of(pattern[i-1]);
2330 build_table(_pattern);
2333 size_t m = _pattern.
size();
2335 return range.begin();
2336 size_t n= range.size();
2341 while((j>=0)&&(_pattern[j]==range[i])){
2345 return addressof(range[i+1]);
2347 if(get_index_of(range[k-1])!=pre_index_table[index_k])
2348 i=k+radical_skip_table[index_k];
2350 i=k+skip_table[index_k];
2358 template<
typename T>
2363 size_t skip_table[number_of_possible_values_per<index_type>]{};
2364 size_t radical_skip_table[number_of_possible_values_per<index_type>]{};
2365 index_type pre_index_table[number_of_possible_values_per<index_type>]{};
2368 return index_type(
hash(ch) % number_of_possible_values_per<index_type>);
2371 const size_t m=pattern.size();
2374 for(
size_t i=0;i<number_of_possible_values_per<index_type>;i++){
2375 skip_table[i]=radical_skip_table[i]=m;
2377 skip_table[get_index_of(pattern[m-1])]=radical_skip_table[get_index_of(pattern[m-1])]=m-1;
2378 for(ptrdiff_t i=m-2;i>=0;i--){
2380 radical_skip_table[index]=skip_table[index];
2381 skip_table[index]=i;
2382 pre_index_table[index]=get_index_of(pattern[i+1]);
2386 build_table(_pattern);
2389 size_t m=_pattern.
size();
2391 return range.begin();
2392 size_t n= range.size();
2397 while((j<=m-1)&&(_pattern[j]==range[i])){
2401 return addressof(range[k]);
2403 if(get_index_of(range[k+1])!=pre_index_table[index_k])
2404 i=k-radical_skip_table[index_k];
2406 i=k-skip_table[index_k];
2414 static constexpr
size_t npos =
size_t(-1);
2416 template<typename T>
2418 for(
auto&i : range){
2420 return addressof(i);
2425 template<
typename T>
2427 auto result =
in_range(pattern,range);
2429 return result - range.
begin();
2435 template<
typename T>
2437 if(range.
size() >= 512 && pattern.
size() >= 11){
2439 return tmp.
match(range);
2443 size_t matching_off_set=1;
2447 while(pattern.
end()[0-matching_off_set]==range.
begin()[off_set+pattern.
size()-matching_off_set])
2448 if(matching_off_set==pattern.
size())
2449 return addressof(range.
begin()[off_set]);
2452 if(off_set+pattern.
size() >= range.
size())
2456 tmp=pattern.
begin();
2457 off_set+=pattern.
end()-tmp;
2461 template<
typename T>
2463 auto result =
in_range(pattern,range);
2465 return result - range.
begin();
2470 template<
typename T>
2472 for(
auto&i : range|::std::views::reverse){
2474 return addressof(i);
2479 template<
typename T>
2483 return result - range.
begin();
2489 template<
typename T>
2491 if(range.
size() >= 512 && pattern.
size() >= 11){
2493 return tmp.
match(range);
2497 size_t matching_off_set=0;
2501 while(pattern.
begin()[matching_off_set]==range.
end()[0-(off_set+pattern.
size()-matching_off_set)])
2502 if(matching_off_set==pattern.
size()-1)
2503 return addressof(range.
end()[0-(off_set+pattern.
size())]);
2506 if(off_set+pattern.
size() >= range.
size())
2510 tmp=pattern.
end()-1;
2511 off_set+=tmp-pattern.
begin();
2516 template<
typename T>
2520 return result - range.
begin();
2528 template<
typename T>
2531 bool _bitmark[number_of_possible_values_per<index_type>]{};
2535 if constexpr(number_of_possible_values_per<T> > number_of_possible_values_per<index_type>){
2536 for(
auto& i: pattern){
2537 if(::std::make_unsigned_t<T>(i) >= number_of_possible_values_per<index_type>)
2543 for(
auto& i: pattern)
2549 if constexpr(number_of_possible_values_per<T> > number_of_possible_values_per<index_type>)
2550 if(::std::make_unsigned_t<T>(index) >= number_of_possible_values_per<index_type>)
2557 template<
typename T>
2559 for(
auto&i : range){
2561 return addressof(i);
2567 template<
typename T>
2569 for(
auto&i : range){
2571 return addressof(i);
2577 template<
typename T>
2579 if constexpr(::std::is_integral_v<T>){
2581 if(mark.
mark(pattern))
2587 template<
typename T>
2591 return result - range.
begin();
2597 template<
typename T>
2599 for(
auto& i: range|::std::views::reverse){
2601 return addressof(i);
2606 template<
typename T>
2608 for(
auto&i : range|::std::views::reverse){
2610 return addressof(i);
2616 template<
typename T>
2618 if constexpr(::std::is_integral_v<T>){
2620 if(mark.
mark(pattern))
2626 template<
typename T>
2630 return result - range.
begin();
2636 template<
typename T>
2638 for(
auto& i: range){
2640 return addressof(i);
2646 template<
typename T>
2648 for(
auto&i : range){
2650 return addressof(i);
2656 template<
typename T>
2658 if constexpr(::std::is_integral_v<T>){
2660 if(mark.
mark(pattern))
2666 template<
typename T>
2670 return result - range.
begin();
2676 template<
typename T>
2678 for(
auto& i: range|::std::views::reverse){
2680 return addressof(i);
2686 template<
typename T>
2688 for(
auto&i : range|::std::views::reverse){
2690 return addressof(i);
2696 template<
typename T>
2698 if constexpr(::std::is_integral_v<T>){
2700 if(mark.
mark(pattern))
2706 template<
typename T>
2710 return result - range.
begin();
2727 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2728 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/string_view.hpp"
2738 namespace constexpr_str_n {
2739 template<
typename char_T>
2746 template<
typename T>
2749 template<
typename T>
2751 auto result =
in_range(pattern, range);
2753 return result - range.data();
2757 template<
typename T>
2760 template<
typename T>
2764 return result - range.data();
2768 template<
typename T>
2771 template<
typename T>
2775 return result - range.data();
2779 template<
typename T>
2782 template<
typename T>
2786 return result - range.data();
2790 template<
typename T>
2793 template<
typename T>
2797 return result - range.data();
2801 template<
typename T>
2804 template<
typename T>
2808 return result - range.
begin();
2814 namespace string_view_n{
2816 template<
typename char_T>
2818 static constexpr size_t npos=range_n::npos;
2821 using base_t::base_t;
2824 [[nodiscard]]
constexpr const char_T*
str()const noexcept{
return base_t::cbegin();}
2825 [[nodiscard]]
constexpr const char_T*
data()const noexcept{
return base_t::cbegin();}
2826 [[nodiscard]]
constexpr operator const char_T*()
const noexcept{
return str();}
2832 return string_view_t(base_t::cbegin()+pos,base_t::size()-pos);
2847 [[nodiscard]]
constexpr size_t find(
const char_T ch)
const{
2848 return in_range_size_t(ch, *
this);
2851 return in_range_but_reverse_size_t(ch, *
this);
2854 return in_range_size_t(str, *
this);
2857 return in_range_but_reverse_size_t(str, *
this);
2860 return in_range_size_t(str, *
this);
2863 return in_range_but_reverse_size_t(str, *
this);
2867 return range_n::find_first_of_size_t(ch, *
this);
2870 return range_n::find_last_of_size_t(ch, *
this);
2873 return range_n::find_first_not_of_size_t(ch, *
this);
2876 return range_n::find_last_not_of_size_t(ch, *
this);
2879 return range_n::find_first_of_size_t(str, *
this);
2882 return range_n::find_last_of_size_t(str, *
this);
2885 return range_n::find_first_not_of_size_t(str, *
this);
2888 return range_n::find_last_not_of_size_t(str, *
this);
2891 return range_n::find_first_of_size_t(str, *
this);
2894 return range_n::find_last_of_size_t(str, *
this);
2897 return range_n::find_first_not_of_size_t(str, *
this);
2900 return range_n::find_last_not_of_size_t(str, *
this);
2910 #line 32 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2911 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/type_name.hpp"
2929 const char*demangled_name;
2931 #if defined(__clang__)||defined(__GNUC__)
2935 demangled_name=::abi::__cxa_demangle(original_name,
nullptr,&len,&status);
2937 demangled_name=original_name;
2938 len=::std::strlen(original_name);
2939 ::std::free((
void*)demangled_name);
2944 demangled_name=original_name;
2945 len=::std::strlen(original_name);
2947 return base_t{demangled_name,len};
2951 #if defined(__clang__)||defined(__GNUC__)
2954 char*copyed_name=(
char*)::std::malloc(demangled_name.size()+1);
2955 if(copyed_name==
nullptr)
2956 return base_t{
nullptr,0};
2957 ::std::memcpy(copyed_name,demangled_name.data(),demangled_name.size());
2958 copyed_name[demangled_name.size()]=
'\0';
2959 return base_t{copyed_name,demangled_name.
size()};
2963 return demangled_name;
2976 #if defined(__clang__)||defined(__GNUC__)
2979 ::std::free((
void*)begin());
2984 return _tid.get_name();
2986 [[nodiscard]]
inline type_name_t base_type_info_t::type_id_t::get_name()const noexcept{
2989 template<
typename T>
2996 #line 33 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
2997 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/constexpr_str.hpp"
3006 namespace constexpr_str_n{
3008 template<
typename char_T>
3014 [[nodiscard]]
constexpr const char_T*
str()const noexcept{
return base_t::cbegin();}
3015 [[nodiscard]]
constexpr const char_T*
data()const noexcept{
return base_t::cbegin();}
3016 [[nodiscard]]
constexpr operator const char_T*()
const noexcept{
return str();}
3019 return base_t::substr(pos,len);
3022 return base_t::substr(pos);
3025 return base_t::substr(pos,
end);
3028 return base_t::substr(begin,len);
3031 return base_t::substr(begin);
3034 return base_t::substr(begin,
end);
3038 template<
typename char_T>
3048 hash_result(defs::
hash(str, size)),
3051 is_bitmark_workable = bitmark_for_finds.
mark(*
this);
3054 [[nodiscard]]
constexpr hash_t hash()const noexcept{
return hash_result;}
3056 template<
class char_T,
size_t N>
3066 template<constexpr_str_t_literal_helper v>
3072 template<constexpr_str_t_literal_helper str_helper>
3073 [[nodiscard]]
inline consteval auto&
operator ""_constexpr_str()noexcept{
3077 template<
class char_T>
3083 using constexpr_str_n::operator
""_constexpr_str;
3087 template<
typename T>
3091 template<
typename T>
3097 template<
typename T>
3108 template<
typename T>
3119 template<
typename T>
3130 template<
typename T>
3143 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3144 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/logical_bool.hpp"
3172 [[no_unique_address]]
bool _is_true;
3173 [[no_unique_address]]
bool _is_false;
3174 [[no_unique_address]]
bool _is_unknown;
3176 constexpr logical_bool(
special_init_t,
bool is_true,
bool is_false,
bool is_unknown=0):_is_true(is_true),_is_false(is_false),_is_unknown(is_unknown){}
3180 constexpr explicit operator bool()
const{
return _is_true && !_is_unknown;}
3183 swap(aret._is_true,aret._is_false);
3187 return logical_bool{
special_init,a._is_true && b._is_true,a._is_false || b._is_false,a._is_unknown || b._is_unknown};
3190 return logical_bool{
special_init,a._is_true || b._is_true,a._is_false && b._is_false,a._is_unknown || b._is_unknown};
3193 logical_bool aret(a._is_true == b._is_true && a._is_false == b._is_false);
3194 aret._is_unknown = a._is_unknown || b._is_unknown;
3202 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3203 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/zero.hpp"
3216 template<
class T>
requires(
type_info<
decltype(0)>.can_convert_to<T>)
3217 operator T()const noexcept(type_info<decltype(0)>.can_nothrow_convert_to<T>){
return 0;}
3223 const byte*
end=ptr+
sizeof(a);
3225 if((
unsigned char)(*ptr++))
3232 #line 36 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3233 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/count_able.hpp"
3248 static size_t _number;
3255 if constexpr(type_info<T>.not_has_attribute(
count_able))
3262 #line 37 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3263 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/invoke.hpp"
3272 template<
typename T>
3274 template<
class...Args>
3275 static constexpr bool able= ::std::is_invocable_v<T,Args...>;
3276 template<
class...Args>
3277 static constexpr bool nothrow= ::std::is_nothrow_invocable_v<T,Args...>;
3279 template<
class...Args>
requires able<Args...>
3280 auto _as(Args&&...rest)
const noexcept(nothrow<Args...>){
3281 return lambda_with_catch(rest...)(
const T&a)
noexcept(nothrow<Args...>){
return a(forward<Args>(rest)...);};
3284 template<
typename T>
3289 #line 38 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3290 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/maybe_fail_reference.hpp"
3299 template<
typename T>
3308 [[nodiscard]]
bool fail()noexcept{
return!not_fail();}
3314 #line 39 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/base_defs/_body.hpp"
3318 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
3322 #if defined(_VCRUNTIME_H)
3326 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
3334 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
3345 #if defined(_MSC_VER)
3346 #pragma warning(pop)
3348 #undef suppress_msvc_warning
3349 #undef disable_msvc_warning
3350 #undef push_msvc_warning
3351 #undef pop_msvc_warning
3352 #undef push_and_disable_msvc_warning
3355 #undef BIT_POSSIBILITY
3357 #if defined(ELC_VOID_NAME)
3358 #define void the_void
3363 #undef noexcept_as_auto
3365 #undef constexpr_as_auto
3367 #undef using_method_from_base_t
3368 #undef using_method_from_value
3378 #undef template_error
3379 #undef template_warning
3384 #undef is_common_attribute
3385 #undef is_special_attribute
3387 #undef has_attribute
3388 #undef not_has_attribute
3390 #undef float_size_of
3393 #undef def_common_attribute_with_nothing
3394 #undef def_special_attribute_with_nothing
3396 #undef common_attribute_t
3397 #undef special_attribute_t
3400 #undef enabled_by_default
3401 #undef disabled_by_default
3402 #undef enable_if_not_ill_form
3405 #undef was_an_ill_form
3406 #undef was_an_ill_form_with_parameter
3407 #undef was_not_an_ill_form
3408 #undef was_not_an_ill_form_and_noexcept
3409 #undef was_not_an_ill_form_with_parameter
3411 #undef recursive_lambda
3412 #undef get_recursive_lambda_caller
3414 #undef lambda_with_catch
3415 #undef self_recursion
3416 #undef lambda_RLSRRS
3426 #if defined(_MSC_VER)
3432 #undef INTER_NAMESPACE
3433 #undef BREAK_NAMESPACE
3438 #undef template_name
3446 #undef ELC_TEST_EVENTNAME
3448 #undef override_instance_struct
3454 #undef with_no_vtable
3458 #undef no_vtable_struct
3459 #undef no_vtable_class
3463 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
3467 #line 38 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_defs/_body.hpp"
3472 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3477 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
3480 #if defined(ELC_TEST_ON)
3483 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
3492 #if defined(ELC_TEST)
3493 #error "this part cannot be tested."
3498 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3511 #if !defined(ELC_APIS_alloc)
3512 #define ELC_APIS_alloc
3513 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3514 #include <stacktrace>
3516 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
3528 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
3529 #define SYSTEM_TYPE linux
3530 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
3531 #define SYSTEM_TYPE windows
3533 #define SYSTEM_TYPE other
3535 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
3539 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3540 #if SYSTEM_TYPE == windows
3549 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3558 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
3562 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3564 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3576 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3578 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
3589 #define BIT_POSSIBILITY 2
3593 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
3595 #if defined(_MSC_VER)
3596 #pragma warning(push,ELC_WARNING_LEVEL)
3597 #pragma warning(disable:4099)
3598 #pragma warning(disable:26812)
3599 #pragma warning(disable:4584)
3600 #pragma warning(disable:4250)
3601 #pragma warning(disable:26432)
3602 #pragma warning(disable:26435)
3603 #pragma warning(disable:26481)
3604 #pragma warning(disable:26446)
3605 #pragma warning(disable:26434)
3606 #pragma warning(disable:26429)
3607 #pragma warning(disable:26471)
3608 #pragma warning(disable:26474)
3609 #pragma warning(disable:26473)
3610 #pragma warning(disable:26456)
3611 #pragma warning(disable:26485)
3612 #pragma warning(disable:26490)
3613 #pragma warning(disable:26472)
3614 #pragma warning(disable:26482)
3615 #pragma warning(disable:26493)
3617 #if defined(_MSC_VER)
3618 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
3619 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
3620 #define push_msvc_warning() __pragma(warning(push))
3621 #define pop_msvc_warning() __pragma(warning(pop))
3622 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
3624 #define suppress_msvc_warning(...)
3625 #define disable_msvc_warning(...)
3626 #define push_msvc_warning()
3627 #define pop_msvc_warning()
3628 #define push_and_disable_msvc_warning(...)
3631 #if defined(ELC_VOID_NAME)
3636 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
3637 #define noexcept_as_auto MAGIC
3638 #define constexpr_as(...) MAGIC constexpr
3639 #define constexpr_as_auto MAGIC MAGIC constexpr
3641 #define using_method_from_base_t(name,...) \
3642 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
3643 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
3645 return base_t::name(forward<Args>(rest)...);\
3648 #define using_method_from_value(name,value_name,...) \
3649 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
3650 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
3652 return value_name.name(forward<Args>(rest)...);\
3655 #define floop while(__builtin_is_my_dick_still_there())
3656 #define enable_adl(name) void name()noexcept=delete
3658 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
3659 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
3661 #define declvalue(...) (::std::declval<__VA_ARGS__>())
3664 #define template_error(reason) static_assert(template_error_helper<T>,reason)
3666 #define template_warning(reason) template_warning_helper<T>(reason)
3669 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
3670 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
3672 #define is_common_attribute(name) public attribute<T,name<T>>
3673 #define is_special_attribute(name) public attribute<T,name>
3675 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
3676 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
3679 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
3681 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
3684 #define def_common_attribute_with_nothing(name) \
3685 template<typename T>\
3688 #define def_special_attribute_with_nothing(name) \
3691 #define common_attribute_t template<class>class
3692 #define special_attribute_t class
3702 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
3704 #define enabled_by_default class enable_state=void
3706 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
3708 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
3710 #define enable_flag class enable_state
3712 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
3713 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
3714 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
3715 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
3716 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
3719 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
3721 #define get_recursive_lambda_caller(name) \
3722 lambda_with_catch(&)(auto&&...Args){\
3723 return name(name,Args...);\
3728 #define lambda_with_catch(...) [__VA_ARGS__]
3730 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
3732 #define lambda_RLSRRS _my_jb_super_sb_name_
3740 #define elseif else if
3742 #define _big_than_ >
3744 #define _small_than_ <
3746 #if defined(_MSC_VER)
3753 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
3755 #define BREAK_NAMESPACE }
3758 #define template_name template
3760 #define type_name class
3762 #if defined(DEBUG) || defined(_DEBUG)
3763 #define not_in_debug 0
3765 #define not_in_debug 1
3769 #define ec(ch) U ## ch
3771 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
3772 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
3774 #define ELC_TEST_EVENTNAME(name)
3777 #define override_instance_struct \
3779 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
3780 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
3781 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
3782 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
3783 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
3786 #define distinctive __declspec(dllexport)
3792 #define force_inline __forceinline
3793 #elif defined(__GNUC__)
3794 #define force_inline __attribute__((always_inline)) inline
3796 #define force_inline inline
3800 #define with_no_vtable __declspec(novtable)
3802 #define with_no_vtable
3805 #define in_consteval (::std::is_constant_evaluated())
3807 #define no_vtable_struct struct with_no_vtable
3808 #define no_vtable_class class with_no_vtable
3812 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3815 #if SYSTEM_TYPE != windows
3817 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc/default_method/overhead.hpp"
3826 namespace overhead_n{
3829 return max(align,
alignof(
size_t));
3833 return (
size_t(
sizeof(
size_t)/align)+
bool(
sizeof(
size_t)%align))*align;
3852 *
reinterpret_cast<size_t*
>(a)=size;
3855 return*
reinterpret_cast<const size_t*
>(a);
3861 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3864 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc/debug_info/source_location_guard.hpp"
3873 #if defined(_MSC_VER)
3874 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3875 #pragma detect_mismatch("ELC_MEMORY_ALLOC_LOCATION_RECORD","true")
3877 #pragma detect_mismatch("ELC_MEMORY_ALLOC_LOCATION_RECORD","false")
3880 #if defined(ELC_MEMORY_ALLOC_LOCATION_RECORD)
3881 distinctive inline ::std::stacktrace_entry operate_source_frame;
3883 const char*_file=
nullptr;
3884 uint_least32_t _line=0;
3885 const char*file()noexcept{
3888 static ::std::string file_cache;
3889 file_cache=operate_source_frame.source_file();
3890 _file=file_cache.c_str();
3897 uint_least32_t line()noexcept{
3900 _line=operate_source_frame.source_line();
3907 void clear()noexcept{
3912 struct source_location_guard{
3914 source_location_guard(
size_t lookup=0)noexcept{
3915 if(!operate_source_frame){
3916 ::std::stacktrace stack = ::std::stacktrace::current(lookup+2,1);
3918 operate_source_frame = stack[0];
3923 ~source_location_guard()noexcept{
3925 operate_source_frame = ::std::stacktrace_entry{};
3935 constexpr const char*
file()noexcept{
return nullptr;}
3936 constexpr uint_least32_t
line()noexcept{
return 0;}
3937 }operate_source_location;
3942 #line 36 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
3945 #if defined(_MSC_VER)
3946 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
3947 #pragma detect_mismatch("ELC_TEST_COUNT_MEMORY_ALLOC","true")
3949 #pragma detect_mismatch("ELC_TEST_COUNT_MEMORY_ALLOC","false")
3953 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
3954 [[nodiscard]]
inline size_t get_size_of_alloc(
const byte*p,
size_t align)
noexcept;
3955 namespace count_info{
3962 inline void update_memory_using(ptrdiff_t diff)
noexcept{
3964 if(memory_using>memory_using_max)
3965 memory_using_max=memory_using;
3967 inline void clear()noexcept{
3987 #if SYSTEM_TYPE == windows
3991 aret = _aligned_malloc(size,align);
3994 using namespace overhead_n;
3995 void*tmp=::std::aligned_alloc(correct_align(align),correct_size(size,align));
3997 set_overhead(tmp,size);
3998 aret = correct_pointer(tmp,align);
4004 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4006 count_info::alloc_count++;
4007 count_info::alloc_size+=size;
4008 count_info::update_memory_using(size);
4021 [[nodiscard]]
inline byte*realloc(
byte*ptr,
size_t nsize,[[maybe_unused]]
size_t align)
noexcept{
4022 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4023 const auto osize=get_size_of_alloc(ptr,align);
4027 #if SYSTEM_TYPE == windows
4031 aret = _aligned_realloc(ptr,nsize,align);
4034 using namespace overhead_n;
4035 void*tmp=::std::realloc(recorrect_pointer(ptr,align),correct_size(nsize,align));
4037 set_overhead(tmp,nsize);
4038 aret = correct_pointer(tmp,align);
4044 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4046 count_info::alloc_size+=nsize-osize;
4047 count_info::update_memory_using(nsize-osize);
4057 inline void free(
byte*p,[[maybe_unused]]
size_t align)
noexcept{
4058 #if defined(ELC_TEST_COUNT_MEMORY_ALLOC)
4059 const auto size=get_size_of_alloc(p,align);
4060 count_info::free_count++;
4061 count_info::free_size+=size;
4062 count_info::update_memory_using(-ptrdiff_t(size));
4065 #if SYSTEM_TYPE == windows
4067 _aligned_free_dbg(p);
4072 using namespace overhead_n;
4073 ::std::free(recorrect_pointer(p,align));
4080 [[nodiscard]]
inline size_t get_size_of_alloc(
const byte*p,[[maybe_unused]]
size_t align)
noexcept{
4081 #if SYSTEM_TYPE == windows
4083 return _aligned_msize_dbg(remove_const(p),align,0);
4085 return _aligned_msize(remove_const(p),align,0);
4088 using namespace overhead_n;
4089 return get_overhead(recorrect_pointer(p,align));
4093 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
4104 #if defined(_MSC_VER)
4105 #pragma warning(pop)
4107 #undef suppress_msvc_warning
4108 #undef disable_msvc_warning
4109 #undef push_msvc_warning
4110 #undef pop_msvc_warning
4111 #undef push_and_disable_msvc_warning
4114 #undef BIT_POSSIBILITY
4116 #if defined(ELC_VOID_NAME)
4117 #define void the_void
4122 #undef noexcept_as_auto
4124 #undef constexpr_as_auto
4126 #undef using_method_from_base_t
4127 #undef using_method_from_value
4137 #undef template_error
4138 #undef template_warning
4143 #undef is_common_attribute
4144 #undef is_special_attribute
4146 #undef has_attribute
4147 #undef not_has_attribute
4149 #undef float_size_of
4152 #undef def_common_attribute_with_nothing
4153 #undef def_special_attribute_with_nothing
4155 #undef common_attribute_t
4156 #undef special_attribute_t
4159 #undef enabled_by_default
4160 #undef disabled_by_default
4161 #undef enable_if_not_ill_form
4164 #undef was_an_ill_form
4165 #undef was_an_ill_form_with_parameter
4166 #undef was_not_an_ill_form
4167 #undef was_not_an_ill_form_and_noexcept
4168 #undef was_not_an_ill_form_with_parameter
4170 #undef recursive_lambda
4171 #undef get_recursive_lambda_caller
4173 #undef lambda_with_catch
4174 #undef self_recursion
4175 #undef lambda_RLSRRS
4185 #if defined(_MSC_VER)
4191 #undef INTER_NAMESPACE
4192 #undef BREAK_NAMESPACE
4197 #undef template_name
4205 #undef ELC_TEST_EVENTNAME
4207 #undef override_instance_struct
4213 #undef with_no_vtable
4217 #undef no_vtable_struct
4218 #undef no_vtable_class
4222 #line 187 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
4225 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
4238 #undef ERROR_MSG_UNABLE_OS
4242 #line 190 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/alloc.hpp"
4247 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
4249 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4262 #if !defined(ELC_APIS_die)
4263 #define ELC_APIS_die
4266 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
4276 typedef char32_t char_t;
4278 typedef int64_t int_t;
4280 typedef uint64_t uint_t;
4282 typedef double float_t;
4284 typedef long double float_size_t;
4289 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4291 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4303 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4305 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
4316 #define BIT_POSSIBILITY 2
4320 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4322 #if defined(_MSC_VER)
4323 #pragma warning(push,ELC_WARNING_LEVEL)
4324 #pragma warning(disable:4099)
4325 #pragma warning(disable:26812)
4326 #pragma warning(disable:4584)
4327 #pragma warning(disable:4250)
4328 #pragma warning(disable:26432)
4329 #pragma warning(disable:26435)
4330 #pragma warning(disable:26481)
4331 #pragma warning(disable:26446)
4332 #pragma warning(disable:26434)
4333 #pragma warning(disable:26429)
4334 #pragma warning(disable:26471)
4335 #pragma warning(disable:26474)
4336 #pragma warning(disable:26473)
4337 #pragma warning(disable:26456)
4338 #pragma warning(disable:26485)
4339 #pragma warning(disable:26490)
4340 #pragma warning(disable:26472)
4341 #pragma warning(disable:26482)
4342 #pragma warning(disable:26493)
4344 #if defined(_MSC_VER)
4345 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
4346 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
4347 #define push_msvc_warning() __pragma(warning(push))
4348 #define pop_msvc_warning() __pragma(warning(pop))
4349 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
4351 #define suppress_msvc_warning(...)
4352 #define disable_msvc_warning(...)
4353 #define push_msvc_warning()
4354 #define pop_msvc_warning()
4355 #define push_and_disable_msvc_warning(...)
4358 #if defined(ELC_VOID_NAME)
4363 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
4364 #define noexcept_as_auto MAGIC
4365 #define constexpr_as(...) MAGIC constexpr
4366 #define constexpr_as_auto MAGIC MAGIC constexpr
4368 #define using_method_from_base_t(name,...) \
4369 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
4370 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
4372 return base_t::name(forward<Args>(rest)...);\
4375 #define using_method_from_value(name,value_name,...) \
4376 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
4377 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
4379 return value_name.name(forward<Args>(rest)...);\
4382 #define floop while(__builtin_is_my_dick_still_there())
4383 #define enable_adl(name) void name()noexcept=delete
4385 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
4386 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
4388 #define declvalue(...) (::std::declval<__VA_ARGS__>())
4391 #define template_error(reason) static_assert(template_error_helper<T>,reason)
4393 #define template_warning(reason) template_warning_helper<T>(reason)
4396 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
4397 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
4399 #define is_common_attribute(name) public attribute<T,name<T>>
4400 #define is_special_attribute(name) public attribute<T,name>
4402 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
4403 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
4406 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
4408 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
4411 #define def_common_attribute_with_nothing(name) \
4412 template<typename T>\
4415 #define def_special_attribute_with_nothing(name) \
4418 #define common_attribute_t template<class>class
4419 #define special_attribute_t class
4429 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
4431 #define enabled_by_default class enable_state=void
4433 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
4435 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
4437 #define enable_flag class enable_state
4439 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
4440 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
4441 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
4442 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
4443 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
4446 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
4448 #define get_recursive_lambda_caller(name) \
4449 lambda_with_catch(&)(auto&&...Args){\
4450 return name(name,Args...);\
4455 #define lambda_with_catch(...) [__VA_ARGS__]
4457 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
4459 #define lambda_RLSRRS _my_jb_super_sb_name_
4467 #define elseif else if
4469 #define _big_than_ >
4471 #define _small_than_ <
4473 #if defined(_MSC_VER)
4480 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
4482 #define BREAK_NAMESPACE }
4485 #define template_name template
4487 #define type_name class
4489 #if defined(DEBUG) || defined(_DEBUG)
4490 #define not_in_debug 0
4492 #define not_in_debug 1
4496 #define ec(ch) U ## ch
4498 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
4499 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
4501 #define ELC_TEST_EVENTNAME(name)
4504 #define override_instance_struct \
4506 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
4507 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
4508 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
4509 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
4510 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
4513 #define distinctive __declspec(dllexport)
4519 #define force_inline __forceinline
4520 #elif defined(__GNUC__)
4521 #define force_inline __attribute__((always_inline)) inline
4523 #define force_inline inline
4527 #define with_no_vtable __declspec(novtable)
4529 #define with_no_vtable
4532 #define in_consteval (::std::is_constant_evaluated())
4534 #define no_vtable_struct struct with_no_vtable
4535 #define no_vtable_class class with_no_vtable
4539 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4541 [[noreturn]]
inline void die()noexcept{
4542 #if defined(_MSC_VER)
4545 #if defined(_WINMAIN_)
4546 ::MessageBoxW(NULL,L
"elc died.",NULL,MB_ICONERROR);
4548 ::std::fputs(
"elc died.\n",stderr);
4549 ::std::fflush(stderr);
4554 #if defined(_MSC_VER)
4564 ::std::mbstate_t stat{};
4565 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
4568 char err_msg_in_char[2048];
4569 char* err_msg_write = err_msg_in_char;
4577 s = ::std::c32rtomb(err_msg_write, c, &stat);
4582 *err_msg_write =
'\0';
4583 #if defined(_WINMAIN_)
4584 wchar_t err_msg_in_wchar[2048];
4585 MultiByteToWideChar(CP_UTF8, 0, err_msg_in_char, -1, err_msg_in_wchar, 2048);
4586 ::MessageBoxW(NULL,err_msg_in_wchar,NULL,MB_ICONERROR);
4588 ::std::fputs(
"elc died because:\n",stderr);
4589 ::std::fputs(err_msg_in_char,stderr);
4590 ::std::fputc(
'\n',stderr);
4591 ::std::fflush(stderr);
4598 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
4609 #if defined(_MSC_VER)
4610 #pragma warning(pop)
4612 #undef suppress_msvc_warning
4613 #undef disable_msvc_warning
4614 #undef push_msvc_warning
4615 #undef pop_msvc_warning
4616 #undef push_and_disable_msvc_warning
4619 #undef BIT_POSSIBILITY
4621 #if defined(ELC_VOID_NAME)
4622 #define void the_void
4627 #undef noexcept_as_auto
4629 #undef constexpr_as_auto
4631 #undef using_method_from_base_t
4632 #undef using_method_from_value
4642 #undef template_error
4643 #undef template_warning
4648 #undef is_common_attribute
4649 #undef is_special_attribute
4651 #undef has_attribute
4652 #undef not_has_attribute
4654 #undef float_size_of
4657 #undef def_common_attribute_with_nothing
4658 #undef def_special_attribute_with_nothing
4660 #undef common_attribute_t
4661 #undef special_attribute_t
4664 #undef enabled_by_default
4665 #undef disabled_by_default
4666 #undef enable_if_not_ill_form
4669 #undef was_an_ill_form
4670 #undef was_an_ill_form_with_parameter
4671 #undef was_not_an_ill_form
4672 #undef was_not_an_ill_form_and_noexcept
4673 #undef was_not_an_ill_form_with_parameter
4675 #undef recursive_lambda
4676 #undef get_recursive_lambda_caller
4678 #undef lambda_with_catch
4679 #undef self_recursion
4680 #undef lambda_RLSRRS
4690 #if defined(_MSC_VER)
4696 #undef INTER_NAMESPACE
4697 #undef BREAK_NAMESPACE
4702 #undef template_name
4710 #undef ELC_TEST_EVENTNAME
4712 #undef override_instance_struct
4718 #undef with_no_vtable
4722 #undef no_vtable_struct
4723 #undef no_vtable_class
4727 #line 78 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/die.hpp"
4736 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
4739 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4752 #if !defined(ELC_LOCALE)
4756 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
4768 typedef int64_t
int_t;
4779 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4780 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/_char.hpp"
4809 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4811 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
4820 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
4824 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
4826 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4838 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4840 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
4851 #define BIT_POSSIBILITY 2
4855 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
4857 #if defined(_MSC_VER)
4858 #pragma warning(push,ELC_WARNING_LEVEL)
4859 #pragma warning(disable:4099)
4860 #pragma warning(disable:26812)
4861 #pragma warning(disable:4584)
4862 #pragma warning(disable:4250)
4863 #pragma warning(disable:26432)
4864 #pragma warning(disable:26435)
4865 #pragma warning(disable:26481)
4866 #pragma warning(disable:26446)
4867 #pragma warning(disable:26434)
4868 #pragma warning(disable:26429)
4869 #pragma warning(disable:26471)
4870 #pragma warning(disable:26474)
4871 #pragma warning(disable:26473)
4872 #pragma warning(disable:26456)
4873 #pragma warning(disable:26485)
4874 #pragma warning(disable:26490)
4875 #pragma warning(disable:26472)
4876 #pragma warning(disable:26482)
4877 #pragma warning(disable:26493)
4879 #if defined(_MSC_VER)
4880 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
4881 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
4882 #define push_msvc_warning() __pragma(warning(push))
4883 #define pop_msvc_warning() __pragma(warning(pop))
4884 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
4886 #define suppress_msvc_warning(...)
4887 #define disable_msvc_warning(...)
4888 #define push_msvc_warning()
4889 #define pop_msvc_warning()
4890 #define push_and_disable_msvc_warning(...)
4893 #if defined(ELC_VOID_NAME)
4898 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
4899 #define noexcept_as_auto MAGIC
4900 #define constexpr_as(...) MAGIC constexpr
4901 #define constexpr_as_auto MAGIC MAGIC constexpr
4903 #define using_method_from_base_t(name,...) \
4904 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
4905 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
4907 return base_t::name(forward<Args>(rest)...);\
4910 #define using_method_from_value(name,value_name,...) \
4911 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
4912 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
4914 return value_name.name(forward<Args>(rest)...);\
4917 #define floop while(__builtin_is_my_dick_still_there())
4918 #define enable_adl(name) void name()noexcept=delete
4920 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
4921 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
4923 #define declvalue(...) (::std::declval<__VA_ARGS__>())
4926 #define template_error(reason) static_assert(template_error_helper<T>,reason)
4928 #define template_warning(reason) template_warning_helper<T>(reason)
4931 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
4932 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
4934 #define is_common_attribute(name) public attribute<T,name<T>>
4935 #define is_special_attribute(name) public attribute<T,name>
4937 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
4938 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
4941 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
4943 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
4946 #define def_common_attribute_with_nothing(name) \
4947 template<typename T>\
4950 #define def_special_attribute_with_nothing(name) \
4953 #define common_attribute_t template<class>class
4954 #define special_attribute_t class
4964 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
4966 #define enabled_by_default class enable_state=void
4968 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
4970 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
4972 #define enable_flag class enable_state
4974 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
4975 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
4976 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
4977 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
4978 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
4981 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
4983 #define get_recursive_lambda_caller(name) \
4984 lambda_with_catch(&)(auto&&...Args){\
4985 return name(name,Args...);\
4990 #define lambda_with_catch(...) [__VA_ARGS__]
4992 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
4994 #define lambda_RLSRRS _my_jb_super_sb_name_
5002 #define elseif else if
5004 #define _big_than_ >
5006 #define _small_than_ <
5008 #if defined(_MSC_VER)
5015 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
5017 #define BREAK_NAMESPACE }
5020 #define template_name template
5022 #define type_name class
5024 #if defined(DEBUG) || defined(_DEBUG)
5025 #define not_in_debug 0
5027 #define not_in_debug 1
5031 #define ec(ch) U ## ch
5033 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
5034 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
5036 #define ELC_TEST_EVENTNAME(name)
5039 #define override_instance_struct \
5041 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
5042 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
5043 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
5044 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
5045 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
5048 #define distinctive __declspec(dllexport)
5054 #define force_inline __forceinline
5055 #elif defined(__GNUC__)
5056 #define force_inline __attribute__((always_inline)) inline
5058 #define force_inline inline
5062 #define with_no_vtable __declspec(novtable)
5064 #define with_no_vtable
5067 #define in_consteval (::std::is_constant_evaluated())
5069 #define no_vtable_struct struct with_no_vtable
5070 #define no_vtable_class class with_no_vtable
5074 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5075 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/zh_cn.hpp"
5092 inline namespace gc{
5096 inline namespace code_convert{
5100 inline namespace lib_load{
5103 inline namespace exception{
5107 inline namespace base_read{
5113 inline namespace package_symbol_loader{
5121 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5122 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
5133 #if defined(_MSC_VER)
5134 #pragma warning(pop)
5136 #undef suppress_msvc_warning
5137 #undef disable_msvc_warning
5138 #undef push_msvc_warning
5139 #undef pop_msvc_warning
5140 #undef push_and_disable_msvc_warning
5143 #undef BIT_POSSIBILITY
5145 #if defined(ELC_VOID_NAME)
5146 #define void the_void
5151 #undef noexcept_as_auto
5153 #undef constexpr_as_auto
5155 #undef using_method_from_base_t
5156 #undef using_method_from_value
5166 #undef template_error
5167 #undef template_warning
5172 #undef is_common_attribute
5173 #undef is_special_attribute
5175 #undef has_attribute
5176 #undef not_has_attribute
5178 #undef float_size_of
5181 #undef def_common_attribute_with_nothing
5182 #undef def_special_attribute_with_nothing
5184 #undef common_attribute_t
5185 #undef special_attribute_t
5188 #undef enabled_by_default
5189 #undef disabled_by_default
5190 #undef enable_if_not_ill_form
5193 #undef was_an_ill_form
5194 #undef was_an_ill_form_with_parameter
5195 #undef was_not_an_ill_form
5196 #undef was_not_an_ill_form_and_noexcept
5197 #undef was_not_an_ill_form_with_parameter
5199 #undef recursive_lambda
5200 #undef get_recursive_lambda_caller
5202 #undef lambda_with_catch
5203 #undef self_recursion
5204 #undef lambda_RLSRRS
5214 #if defined(_MSC_VER)
5220 #undef INTER_NAMESPACE
5221 #undef BREAK_NAMESPACE
5226 #undef template_name
5234 #undef ELC_TEST_EVENTNAME
5236 #undef override_instance_struct
5242 #undef with_no_vtable
5246 #undef no_vtable_struct
5247 #undef no_vtable_class
5251 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
5257 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
5260 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
5268 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5280 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5282 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
5293 #define BIT_POSSIBILITY 2
5297 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
5299 #if defined(_MSC_VER)
5300 #pragma warning(push,ELC_WARNING_LEVEL)
5301 #pragma warning(disable:4099)
5302 #pragma warning(disable:26812)
5303 #pragma warning(disable:4584)
5304 #pragma warning(disable:4250)
5305 #pragma warning(disable:26432)
5306 #pragma warning(disable:26435)
5307 #pragma warning(disable:26481)
5308 #pragma warning(disable:26446)
5309 #pragma warning(disable:26434)
5310 #pragma warning(disable:26429)
5311 #pragma warning(disable:26471)
5312 #pragma warning(disable:26474)
5313 #pragma warning(disable:26473)
5314 #pragma warning(disable:26456)
5315 #pragma warning(disable:26485)
5316 #pragma warning(disable:26490)
5317 #pragma warning(disable:26472)
5318 #pragma warning(disable:26482)
5319 #pragma warning(disable:26493)
5321 #if defined(_MSC_VER)
5322 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
5323 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
5324 #define push_msvc_warning() __pragma(warning(push))
5325 #define pop_msvc_warning() __pragma(warning(pop))
5326 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
5328 #define suppress_msvc_warning(...)
5329 #define disable_msvc_warning(...)
5330 #define push_msvc_warning()
5331 #define pop_msvc_warning()
5332 #define push_and_disable_msvc_warning(...)
5335 #if defined(ELC_VOID_NAME)
5340 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
5341 #define noexcept_as_auto MAGIC
5342 #define constexpr_as(...) MAGIC constexpr
5343 #define constexpr_as_auto MAGIC MAGIC constexpr
5345 #define using_method_from_base_t(name,...) \
5346 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
5347 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
5349 return base_t::name(forward<Args>(rest)...);\
5352 #define using_method_from_value(name,value_name,...) \
5353 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
5354 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
5356 return value_name.name(forward<Args>(rest)...);\
5359 #define floop while(__builtin_is_my_dick_still_there())
5360 #define enable_adl(name) void name()noexcept=delete
5362 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
5363 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
5365 #define declvalue(...) (::std::declval<__VA_ARGS__>())
5368 #define template_error(reason) static_assert(template_error_helper<T>,reason)
5370 #define template_warning(reason) template_warning_helper<T>(reason)
5373 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
5374 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
5376 #define is_common_attribute(name) public attribute<T,name<T>>
5377 #define is_special_attribute(name) public attribute<T,name>
5379 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
5380 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
5383 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
5385 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
5388 #define def_common_attribute_with_nothing(name) \
5389 template<typename T>\
5392 #define def_special_attribute_with_nothing(name) \
5395 #define common_attribute_t template<class>class
5396 #define special_attribute_t class
5406 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
5408 #define enabled_by_default class enable_state=void
5410 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
5412 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
5414 #define enable_flag class enable_state
5416 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
5417 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
5418 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
5419 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
5420 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
5423 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
5425 #define get_recursive_lambda_caller(name) \
5426 lambda_with_catch(&)(auto&&...Args){\
5427 return name(name,Args...);\
5432 #define lambda_with_catch(...) [__VA_ARGS__]
5434 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
5436 #define lambda_RLSRRS _my_jb_super_sb_name_
5444 #define elseif else if
5446 #define _big_than_ >
5448 #define _small_than_ <
5450 #if defined(_MSC_VER)
5457 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
5459 #define BREAK_NAMESPACE }
5462 #define template_name template
5464 #define type_name class
5466 #if defined(DEBUG) || defined(_DEBUG)
5467 #define not_in_debug 0
5469 #define not_in_debug 1
5473 #define ec(ch) U ## ch
5475 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
5476 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
5478 #define ELC_TEST_EVENTNAME(name)
5481 #define override_instance_struct \
5483 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
5484 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
5485 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
5486 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
5487 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
5490 #define distinctive __declspec(dllexport)
5496 #define force_inline __forceinline
5497 #elif defined(__GNUC__)
5498 #define force_inline __attribute__((always_inline)) inline
5500 #define force_inline inline
5504 #define with_no_vtable __declspec(novtable)
5506 #define with_no_vtable
5509 #define in_consteval (::std::is_constant_evaluated())
5511 #define no_vtable_struct struct with_no_vtable
5512 #define no_vtable_class class with_no_vtable
5516 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
5520 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
5523 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
5532 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/defs.hpp"
5541 namespace lifetime_n{
5549 template<
class T,
class...Args>
5551 template<
class T,
class...Args>
5553 template<
class T,
class...Args>
5599 template<
class T>
requires(::std::is_trivially_copyable_v<T>)
5601 if constexpr(
sizeof(T)==
sizeof(
unsigned char))
5602 ::std::memset((
unsigned char*)to,(
unsigned char)value,size);
5603 elseif constexpr(
sizeof(T)==
sizeof(
wchar_t))
5604 ::std::wmemset((
wchar_t*)to,(wchar_t)value,size);
5607 ::std::memset(to,
zero,size*
sizeof(T));
5609 ::std::fill_n(to,size,value);
5612 template<
class T>
requires(::std::is_trivially_copyable_v<T>)
5614 if constexpr(
sizeof(T)>=
sizeof(::std::max_align_t))
5616 ::std::memset(to,
zero,
sizeof(T));
5634 template<
typename T>
5637 template<
class...Args>
5639 template<
class...Args>
5641 template<
class...Args>
5644 template<
class...Args>
requires able<Args...>
5646 return T(forward<Args>(rest)...);
5653 template_error(
"You can\'t construct an array for never_in_array type.");
5655 template<
class...Args>
requires able<Args...>
5658 while(tmp--)
new(_to+tmp)T(forward<Args>(rest)...);
5660 template<
class...Args>
requires able<Args...>
5662 never_in_array_check();
5663 base_call(forward<Args>(rest)...);
5668 never_in_array_check();
5669 if constexpr(trivial<const T&> && ::std::is_trivially_copyable_v<T>)
5672 base_call(forward<const T&>(v));
5677 never_in_array_check();
5678 if constexpr(!trivial<>)
5685 template<
class...Args>
requires able<Args...>
5687 new(_to)T(forward<Args>(rest)...);
5689 template<
class...Args>
requires able<Args...>
5691 base_call(forward<Args>(rest)...);
5696 if constexpr(trivial<const T&> && ::std::is_trivially_copyable_v<T>)
5699 base_call(forward<const T&>(v));
5704 if constexpr(!trivial<>)
5723 template<
typename T>
5738 static constexpr bool able=destruct_able<T>||(::std::is_array_v<T>&&able<::std::remove_extent_t<T>>);
5740 static constexpr bool nothrow=destruct_nothrow<T>||(::std::is_array_v<T>&¬hrow<::std::remove_extent_t<T>>);
5742 static constexpr bool trivial=destruct_trivial<T>||(::std::is_array_v<T>&&trivial<::std::remove_extent_t<T>>);
5744 template<
class T>
requires able<T>
5746 if constexpr(!trivial<T>)
5747 if constexpr(::std::is_array_v<T>)
5749 base_call(addressof(i));
5755 template<
class T>
requires able<T>
5756 static void base_call([[maybe_unused]]T*begin,[[maybe_unused]]
size_t size)
noexcept(nothrow<T>){
5758 template_error(
"You cannot perform array operations on never_in_array type.");
5759 if constexpr(!trivial<T>)
5760 while(size--)base_call(begin+size);
5763 template<
class T>
requires able<T>
5770 template<
class T>
requires able<T>
5772 base_call(begin,_size);
5797 template<
class T,
class...Args>
5799 template<
class T,
class...Args>
5801 template<
class T,
class...Args>
5804 template<
class T>
requires able<T>
5814 template<
class...Args>
requires able<T,Args...>
5817 template_error(
"You cannot perform array operations on never_in_array type.");
5819 construct<T>[_to][_size](forward<Args>(rest)...);
5826 template<
class...Args>
requires able<T,Args...>
5829 construct<T>[_to](forward<Args>(rest)...);
5840 static constexpr bool r_able=copy_construct_able<T>?
5841 copy_construct_trivial<T>||!(construct<T>.trivial<>&©_assign_trivial<T>)
5844 static constexpr bool able=r_able<T>?
true:(construct<T>.able<>&©_assign_able<T>);
5846 static constexpr bool nothrow=r_able<T>?copy_construct_nothrow<T>:
5847 (construct<T>.nothrow<>&©_assign_nothrow<T>);
5849 static constexpr bool trivial=r_able<T>?copy_construct_trivial<T>:
5850 (construct<T>.trivial<>&©_assign_trivial<T>);
5852 template<
class T>
requires able<T>
5854 if constexpr(trivial<T>)
5855 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)));
5857 if constexpr(r_able<T>)
5867 template<
class T>
requires able<T>
5868 static T*
base_call(T*to,
const T*from,
size_t size)
noexcept(nothrow<T>){
5869 if constexpr(trivial<T>)
5870 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)*size));
5873 base_call(to+size,from+size);
5878 template<
class T>
requires able<T>
5880 {
return base_call(to,from);}
5882 template<
class T>
requires able<T>
5884 {
return base_call(to(),from());}
5886 template<
class T>
requires able<T>
5888 {
return base_call(to(),from());}
5891 template<
class T>
requires able<T>
5893 {
return base_call(to,from,size);}
5895 template<
class T>
requires able<T>
5897 {
return base_call(to(),from(),size);}
5899 template<
class T>
requires able<T>
5901 {
return base_call(to(),from(),size);}
5903 template<
class T>
requires able<T>
5905 if constexpr(r_able<T>)
5906 construct<T>[to](from);
5914 template<
class T>
requires able<T>
5915 static T*
base_call(T*to,
const T&from,
size_t size)
noexcept(nothrow<T>){
5917 template_error(
"You cannot perform array operations on never_in_array type.");
5918 if constexpr(::std::is_trivially_copyable_v<T>)
5922 base_call(to+size,from);
5926 template<
class T>
requires able<T>
5928 {
return base_call(to,from);}
5932 template<
class T>
requires able<T>
5934 return base_call(to,from,_size);
5936 template<
class T>
requires able<T>
5938 return base_call(to,from,_size);
5940 template<
class T>
requires able<T>
5942 return operator()(to(),from());
5944 template<
class T>
requires able<T>
5946 return operator()(to(),from());
5954 static constexpr bool r_able=move_construct_able<T>?
5960 static constexpr bool nothrow=r_able<T>?move_construct_nothrow<T>:
5963 static constexpr bool trivial=r_able<T>?move_construct_trivial<T>:
5966 template<
class T>
requires able<T>
5968 if constexpr(trivial<T>)
5969 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)));
5971 if constexpr(r_able<T>){
5972 construct<T>[to](::std::move(*from));
5978 template<
class T>
requires able<T>
5979 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
5981 template_error(
"You cannot perform array operations on never_in_array type.");
5982 if constexpr(trivial<T>)
5983 return reinterpret_cast<T*
>(::std::memcpy(to,
add_const(from),
sizeof(T)*size));
5985 if constexpr(r_able<T>){
5987 construct<T>[to+size](::std::move(from[size]));
5994 template<
class T>
requires able<T>
5996 {
return base_call(to,from);}
5998 template<
class T>
requires able<T>
6000 {
return base_call(to(),from());}
6002 template<
class T>
requires able<T>
6004 {
return base_call(to(),from());}
6008 template<
class T>
requires able<T>
6010 return base_call(to,from,_size);
6012 template<
class T>
requires able<T>
6014 return operator()(to(),from());
6016 template<
class T>
requires able<T>
6018 return operator()(to(),from());
6032 template<
class T>
requires able<T>
6038 template<
class T>
requires able<T>
6039 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
6041 template_error(
"You cannot perform array operations on never_in_array type.");
6047 template<
class T>
requires able<T>
6049 {
return base_call(to,from);}
6051 template<
class T>
requires able<T>
6053 {
return base_call(to(),from());}
6055 template<
class T>
requires able<T>
6057 {
return base_call(to(),from());}
6061 template<
class T>
requires able<T>
6063 return base_call(to,from,_size);
6065 template<
class T>
requires able<T>
6067 return operator()(to(),from());
6069 template<
class T>
requires able<T>
6071 return operator()(to(),from());
6087 [[nodiscard]]
constexpr T
operator()(
const T&a)
const noexcept{
6088 return copy_construct<T>(a);
6094 static constexpr bool r_able=copy_assign_able<T>?
6095 copy_assign_trivial<T>||!(copy_construct_trivial<T>&&
destruct.
trivial<T>)
6098 static constexpr bool able=r_able<T>?
true:(copy_construct_able<T>&&
destruct.
able<T>);
6100 static constexpr bool nothrow=r_able<T>?copy_assign_nothrow<T>:
6103 static constexpr bool trivial=r_able<T>?copy_assign_trivial<T>:
6106 template<
class T>
requires able<T>
6108 if constexpr(r_able<T>)
6112 construct<T>[&a](b);
6116 template<
class T>
requires able<T>
6117 static T*
base_call(T*to,
const T*from,
size_t size)
noexcept(nothrow<T>){
6118 if constexpr(trivial<T>)
6119 ::std::memcpy(to,
add_const(from),size*
sizeof(T));
6122 base_call(to[size],from[size]);
6126 template<
class T>
requires able<T>
6127 static T*
base_call(T* to,
const T& from,
size_t size)
noexcept(nothrow<T>){
6128 if constexpr(trivial<T>)
6132 base_call(to[size],from);
6136 template<
class T>
requires able<T>
6138 return base_call(a,b);
6143 template<
class T>
requires able<T>
6145 return base_call(to,from,_size);
6147 template<
class T>
requires able<T>
6149 return operator()(to(),from());
6151 template<
class T>
requires able<T>
6153 return operator()(to(),from());
6155 template<
class T>
requires able<T>
6157 return base_call(to(),from,_size);
6159 template<
class T>
requires able<T>
6161 return base_call(to(),from,_size);
6169 static constexpr bool r_able=move_assign_able<T>;
6177 template<
class T>
requires able<T>
6179 if constexpr(r_able<T>)
6186 template<
class T>
requires able<T>
6187 static T*
base_call(T*to,T*from,
size_t size)
noexcept(nothrow<T>){
6188 if constexpr(trivial<T>)
6189 ::std::memcpy(to,
add_const(from),size*
sizeof(T));
6192 base_call(to[size],from[size]);
6197 template<
class T>
requires able<T>
6199 return base_call(a,
move(b));
6204 template<
class T>
requires able<T>
6206 return base_call(to,from,_size);
6208 template<
class T>
requires able<T>
6210 return operator()(to(),from());
6212 template<
class T>
requires able<T>
6214 return operator()(to(),from());
6223 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6224 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_export.hpp"
6233 #define export using lifetime_n::
6247 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6248 #if defined(ELC_TEST_ON)
6249 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_test.hpp"
6258 namespace lifetime_n{
6263 inline void test_log_out(){
6265 inline void test_end(){
6272 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/lifetime/_body.hpp"
6277 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
6281 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6291 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/flag.hpp"
6311 [[nodiscard]]
explicit operator bool()const noexcept{
return _m;}
6322 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6323 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/mark_type.hpp"
6339 template<
typename T>
6351 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6353 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/iterator.hpp"
6362 namespace iterator_n{
6363 using namespace memory;
6364 template<
typename base_t_w>
6369 template<
typename build_base_t_T>
requires(construct<base_t_rw>.able<build_base_t_T>)
6370 constexpr reverse_base_t(build_base_t_T&& a)
noexcept(construct<base_t_rw>.nothrow<build_base_t_T>):
_m(a){}
6375 template<
typename base_t>
requires(
compare.
able<base_t>)
6377 return compare((
const base_t&)b.
_m,(
const base_t&)a.
_m);
6379 template<
typename base_t,
typename T>
requires(
compare.
able<T,base_t> && type_info<remove_cvref<T>> != type_info<reverse_base_t<base_t>::base_t_rw>)
6383 template<
typename base_t,
typename T>
requires(
compare.
able<base_t,T> && type_info<remove_cvref<T>> != type_info<reverse_base_t<base_t>::base_t_rw>)
6387 template<
typename base_t,
typename T>
requires(
equal.
able<T,base_t>)
6389 return equal(b,(
const base_t&)a.
_m);
6391 template<
typename base_t,
typename T>
requires(
equal.
able<base_t,T>)
6393 return equal((
const base_t&)b.
_m,a);
6396 template<
typename value_t,
typename base_t_w>
6398 template<
typename,
typename>
6407 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6410 return noexcept(
declvalue(base_t_w)->get_handle());
6412 return noexcept(
declvalue(base_t_w).get_handle());
6414 [[nodiscard]]
inline value_t*
handle_getter()const noexcept(is_handle_getter_noexcept()){
6415 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6416 return ((base_t_w)
_m);
6424 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6427 return noexcept(
declvalue(base_t_w)->get_value());
6429 return noexcept(
declvalue(base_t_w).get_value());
6433 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6436 return type_info<
decltype(((base_t_w)
_m)->get_value())>;
6438 return type_info<
decltype(((base_t_w)
_m).get_value())>;
6445 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6446 return *((base_t_w)
_m);
6448 return ((base_t_w)
_m)->get_value();
6450 return ((base_t_w)
_m).get_value();
6452 return *handle_getter();
6456 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6459 return noexcept(
declvalue(base_t_w)->get_next());
6461 return noexcept(
declvalue(base_t_w).get_next());
6463 [[nodiscard]]
inline base_t_w
next_getter()const noexcept(is_next_getter_noexcept()){
6464 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6465 return ((base_t_w)
_m)+1;
6467 return ((base_t_w)
_m)->get_next();
6469 return ((base_t_w)
_m).get_next();
6473 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6476 return noexcept(
declvalue(base_t_w)->get_before());
6478 return noexcept(
declvalue(base_t_w).get_before());
6480 [[nodiscard]]
inline base_t_w
before_getter()const noexcept(is_before_getter_noexcept()){
6481 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6482 return ((base_t_w)
_m)-1;
6484 return ((base_t_w)
_m)->get_before();
6486 return ((base_t_w)
_m).get_before();
6492 template<typename build_base_t_T> requires(construct<
base_t_rw>.able<build_base_t_T>)
6496 template<
typename other_T,
typename other_base_t>
requires(construct<base_t_rw>.able<other_base_t>)
6500 [[nodiscard]]
constexpr value_t*
operator->()noexcept(is_handle_getter_noexcept()){
return handle_getter(); }
6504 template<
typename other_value_t,
typename other_base_t_w>
requires(
equal.
able<base_t_rw,other_base_t_w>)
6508 template<
typename other_value_t,
typename other_base_t_w>
6514 template<
typename value_t,
typename base_t_w>
6518 template<
typename value_t,
typename base_t_w>
6523 using base_t::is_before_getter_noexcept;
6524 using base_t::is_next_getter_noexcept;
6525 using base_t::before_getter;
6526 using base_t::next_getter;
6529 using base_t::base_t;
6533 constexpr this_t&
operator--()&
noexcept(is_before_getter_noexcept()){
return*
this=before_getter();}
6537 if constexpr(type_info<::std::remove_pointer_t<base_t_w>> == type_info<value_t>)
6538 return base_t::_m+num;
6552 template<
typename value_t,
typename base_t_w>
6554 template<
typename value_t,
typename base_t_w>
6557 template<
typename value_t,
typename base_t_w=value_t*>
6559 template<
typename value_t,
typename base_t_w=const value_t*>
6561 template<
typename value_t,
typename base_t_w=value_t*>
6563 template<
typename value_t,
typename base_t_w=const value_t*>
6574 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6575 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/list.hpp"
6585 template<
typename T>
6590 template<
typename T>
6595 friend iterator_t<T,this_t*>::base_t;
6601 [[nodiscard]]
this_t*get_before()noexcept{
return _before;}
6602 [[nodiscard]]this_t*get_next()noexcept{
return _next;}
6604 constexpr cons_t(this_t*a,this_t*b):_before(a),_next(b){}
6606 constexpr void set_before(this_t*a){
6610 constexpr void set_next(this_t*a){
6614 constexpr void insert_to_before(this_t*a){
6615 set_before(a->_before);
6618 constexpr void bind_with(this_t*a)
noexcept{
6622 constexpr void remove_from_list()noexcept{
6623 _before->set_next(_next);
6626 return attribute_t::get_handle();
6643 template<
typename T>
6651 constexpr list_t()noexcept{_begin.bind_with(&_end);}
6653 a->insert_to_before(&_end);
6658 [[nodiscard]]
constexpr bool empty()const noexcept{
return _begin.get_next()==&_end;}
6663 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6665 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/function_base.hpp"
6674 namespace function_base_n{
6675 #if !defined(_MSC_VER)
6679 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6681 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6683 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6685 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6687 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6689 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6691 template<
typename Ret_t,
typename T,
typename...Args_t,
bool nothrow>
6693 {
using type=Ret_t(Args_t...)
noexcept(nothrow);};
6695 template<
typename T>
6697 if constexpr(::std::is_function_v<T>)
6698 return type_info<T>;
6699 elseif constexpr(is_pointer<T> && ::std::is_function_v<::std::remove_pointer_t<T>>)
6704 template<
typename T>
6713 template<
typename T>
6720 template<
class T,
class Func_t=get_function_type<T>>
6722 template<
class T,
bool nothrow,
class Ret_t,
class...Args_t>
6724 static_assert(!::std::is_function_v<T>);
6730 Ret_t operator()(Args_t...args)noexcept(nothrow || invoke<T>.nothrow<Args_t...>){
6732 if constexpr(!invoke<T>.able<Args_t...>)
6737 if constexpr(type_info<Ret_t> != type_info<void>)
6738 return _value(forward<Args_t>(args)...);
6740 _value(forward<Args_t>(args)...);
6742 Ret_t
operator()(Args_t...args)const noexcept(nothrow || invoke<const T>.nothrow<Args_t...>) requires(invoke<const T>.able<Args_t...>){
6744 if constexpr(!invoke<T>.able<Args_t...>)
6749 if constexpr(type_info<Ret_t> != type_info<void>)
6750 return _value(forward<Args_t>(args)...);
6752 _value(forward<Args_t>(args)...);
6759 struct function_type_getter_helper{};
6761 template<
typename Ret_t,
typename T,
typename...Args_t>
6762 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)>
6763 {
using type=Ret_t(Args_t...);};
6765 template<
typename Ret_t,
typename T,
typename...Args_t>
6766 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)&>
6767 {
using type=Ret_t(Args_t...);};
6769 template<
typename Ret_t,
typename T,
typename...Args_t>
6770 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const>
6771 {
using type=Ret_t(Args_t...);};
6773 template<
typename Ret_t,
typename T,
typename...Args_t>
6774 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const&>
6775 {
using type=Ret_t(Args_t...);};
6777 template<
typename Ret_t,
typename T,
typename...Args_t>
6778 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)noexcept>
6779 {
using type=Ret_t(Args_t...)noexcept;};
6781 template<typename Ret_t,typename T,typename...Args_t>
6782 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)&noexcept>
6783 {
using type=Ret_t(Args_t...)noexcept;};
6785 template<typename Ret_t,typename T,typename...Args_t>
6786 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const noexcept>
6787 {
using type=Ret_t(Args_t...)noexcept;};
6789 template<typename Ret_t,typename T,typename...Args_t>
6790 struct function_type_getter_helper<Ret_t(T::*)(Args_t...)const&noexcept>
6791 {
using type=Ret_t(Args_t...)noexcept;};
6793 template<typename T>
6794 [[nodiscard]]constexpr auto function_type_getter_conditional_helper(){
6795 if constexpr(::std::is_function_v<T>)
6796 return type_info<T>;
6797 elseif constexpr(is_pointer<T> && ::std::is_function_v<::std::remove_pointer_t<T>>)
6798 return function_type_getter_conditional_helper<::std::remove_pointer_t<T>>();
6800 return type_info<
type_name function_type_getter_helper<
decltype(&T::operator())>::type>;
6802 template<
typename T>
6803 struct function_type_getter{
6804 typedef decltype(function_type_getter_conditional_helper<T>())
::template_name type type;
6811 template<
typename T>
6818 template<
class T,
class Func_t=get_function_type<T>>
6819 class function_data_warpper_t;
6820 template<
class T,
class Ret_t,
class...Args_t>
6821 struct function_data_warpper_t<T,Ret_t(Args_t...)noexcept>{
6822 static_assert(!::std::is_function_v<T>);
6826 function_data_warpper_t(T a)
noexcept(construct<T>.nothrow<T>):_value(a){}
6827 ~function_data_warpper_t()noexcept(destruct.nothrow<T>)=default;
6828 Ret_t operator()(Args_t...args)noexcept{
6830 if constexpr(!invoke<T>.able<Args_t...>)
6835 if constexpr(type_info<Ret_t> != type_info<void>)
6836 return _value(forward<Args_t>(args)...);
6838 _value(forward<Args_t>(args)...);
6840 Ret_t operator()(Args_t...args)const noexcept requires(invoke<const T>.able<Args_t...>){
6842 if constexpr(!invoke<T>.able<Args_t...>)
6847 if constexpr(type_info<Ret_t> != type_info<void>)
6848 return _value(forward<Args_t>(args)...);
6850 _value(forward<Args_t>(args)...);
6852 [[nodiscard]]
auto&get_data()noexcept{
return _value;}
6858 template<
class T,
class Ret_t,
class...Args_t>
6859 struct function_data_warpper_t<T,Ret_t(Args_t...)>{
6860 static_assert(!::std::is_function_v<T>);
6864 function_data_warpper_t(T a)
noexcept(construct<T>.nothrow<T>):_value(a){}
6865 ~function_data_warpper_t()noexcept(destruct.nothrow<T>)=default;
6866 Ret_t operator()(Args_t...args)noexcept(invoke<T>.nothrow<Args_t...>){
6868 if constexpr(!invoke<T>.able<Args_t...>)
6873 if constexpr(type_info<Ret_t> != type_info<void>)
6874 return _value(forward<Args_t>(args)...);
6876 _value(forward<Args_t>(args)...);
6878 Ret_t operator()(Args_t...args)const noexcept(invoke<const T>.nothrow<Args_t...>) requires(invoke<const T>.able<Args_t...>){
6880 if constexpr(!invoke<T>.able<Args_t...>)
6885 if constexpr(type_info<Ret_t> != type_info<void>)
6886 return _value(forward<Args_t>(args)...);
6888 _value(forward<Args_t>(args)...);
6890 [[nodiscard]]
auto&get_data()noexcept{
return _value;}
6891 [[nodiscard]]
const auto&get_data()const noexcept{
return _value;}
6895 using function_base_n::get_function_type;
6896 using function_base_n::function_data_warpper_t;
6900 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/tools/_body.hpp"
6904 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
6909 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
6918 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
6927 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/defs.hpp"
6940 using ::elc::defs::memory::gc_n::gc_for_alloc;
6944 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/default_method/defs.hpp"
6953 namespace default_method{
6955 #if defined(_MSC_VER)
6956 #if defined(ELC_TEST_CHECK_MEMORY_LACK)
6957 #pragma detect_mismatch("ELC_TEST_CHECK_MEMORY_LACK","true")
6959 #pragma detect_mismatch("ELC_TEST_CHECK_MEMORY_LACK","false")
6963 [[nodiscard]]
inline byte*
base_realloc(
byte*ptr,
size_t nsize,
size_t align)
noexcept{
6965 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6967 stest_uneventlog(ptr);
6971 stest_uneventlog(ptr);
6979 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6989 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
6990 auto tmp=stest_geteventlistfromlog(p);
6992 stest_putsf(L
"释放了已释放或未分配指针%p,当前的事件记录如下:",p);
6993 stest_printeventlist(stderr,stest_geteventlist());
6997 stest_deleteevent(tmp);
6998 stest_uneventlog(p);
7010 template<
typename T>
7015 template<
typename T>
7020 template_error(
"You cannot perform array operations on never_in_array type.");
7021 return ::std::assume_aligned<alignof(T)>(
base_aligned_alloc(
alignof(T),
sizeof(T)*size));
7023 template<
typename T>
7028 template<
typename T>
7032 template<
typename T>
7039 template_error(
"You cannot perform array operations on never_in_array type.");
7046 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/defs.hpp"
7049 template<
typename T>
7055 return default_method::alloc_method(type_info<T>);
7057 template<
typename T>
7064 return default_method::alloc_method(type_info<T>,size);
7067 template<
typename T>
7068 inline size_t get_size_of_alloc_method(
const T*arg)
noexcept{
7073 return default_method::get_size_of_alloc_method(arg);
7076 template<
typename T>
7077 inline void free_method(T*arg)
noexcept{
7081 default_method::free_method(arg);
7084 template<
typename T>
7085 inline void*realloc_method(T*&ptr,
size_t new_size)
noexcept{
7093 return default_method::realloc_method(ptr,new_size);
7103 while(!
assign(tmp,alloc_method(type_info<T>)))gc_for_alloc();
7104 return reinterpret_cast<T*
>(tmp);
7109 template_error(
"You can\'t alloc an array for never_in_array type.");
7112 while(!
assign(tmp,alloc_method(type_info<T>,size)))gc_for_alloc();
7113 return reinterpret_cast<T*
>(tmp);
7114 }
else return null_ptr;
7145 template_error(
"You cannot perform array operations on never_in_array type.");
7150 while(!realloc_method(ptr,nsize))gc_for_alloc();
7152 ptr=alloc<T>(nsize);
7160 base_call(ptr,nsize);
7171 template<
typename T>
7172 static constexpr bool able=
true;
7173 template<
typename T>
7174 static constexpr bool nothrow=
noexcept(get_size_of_alloc_method(
declvalue(
const T*)));
7176 template<
typename T>
requires able<T>
7181 return get_size_of_alloc_method(arg);
7184 template<
typename T>
requires able<T>
7186 return base_call(arg);
7188 }get_size_of_alloc{};
7191 template<
typename T>
7192 static constexpr bool able=
true;
7193 template<
typename T>
7196 template<
typename T>
requires able<T>
7202 template<
typename T>
requires able<T>
7204 return base_call(arg);
7211 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7212 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_export.hpp"
7221 #define export using alloc_n::
7225 export get_size_of_alloc;
7231 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7232 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
7233 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_test.hpp"
7242 inline void check_memory_lack()noexcept{
7243 stest_mapeventlogwith(
lambda(
const void*p,steventlist*a)
noexcept{
7244 stest_putsf(L
"内存泄露于%p,分配自:",p);
7245 stest_printeventlist(stdout,stest_copyeventlist(a));
7251 #if defined(ELC_TEST_ON)
7259 srand((
unsigned int)time(
nullptr));
7260 for(
int i=rand()%100+40;i--;){
7261 int*p=alloc<int>(50);
7268 stest_accert(p[19]==666);
7269 stest_accert(p[0]==72);
7272 check_memory_lack();
7274 inline void test_log_out(){
7276 inline void test_end(){
7284 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/alloc/_body.hpp"
7289 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
7290 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7299 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/defs.hpp"
7308 namespace abstract_base_n{
7324 template<
typename T>
7326 realloc(arg,to_size);
7329 template<
typename T>
7332 realloc(arg,to_size);
7334 T*tmp=alloc<T>(to_size);
7335 auto from_size=get_size_of_alloc(arg);
7336 if constexpr(!move.
nothrow<T>){
7337 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7339 move[from_size](note::from(arg),note::to(tmp));
7345 move[from_size](note::from(arg),note::to(tmp));
7352 template<
typename T>
7354 const auto from_size=get_size_of_alloc(arg);
7355 const auto to_size=from_size+insert_size;
7356 const auto size_before_insert=insert_pos;
7357 const auto size_after_insert=from_size-insert_pos;
7358 if constexpr(move.
trivial<T>){
7359 realloc(arg,to_size);
7360 memmove(arg+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7363 T*tmp=alloc<T>(to_size);
7364 if constexpr(!move.
nothrow<T>){
7365 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7367 move[size_before_insert](note::from(arg),note::to(tmp));
7368 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7374 move[size_before_insert](note::from(arg),note::to(tmp));
7375 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7386 template<
typename T>
7388 const auto from_size=get_size_of_alloc(arg);
7389 const auto size_before_insert=insert_pos;
7390 const auto size_after_insert=from_size-insert_pos;
7391 if constexpr(move.
trivial<T>){
7392 realloc(arg,to_size);
7393 memmove(arg+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7396 T*tmp=alloc<T>(to_size);
7397 if constexpr(!move.
nothrow<T>){
7398 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7400 move[size_before_insert](note::from(arg),note::to(tmp));
7401 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7407 move[size_before_insert](note::from(arg),note::to(tmp));
7408 move[size_after_insert](note::from(arg+insert_pos),note::to(tmp+insert_pos+insert_size));
7413 return to_size-from_size-insert_size;
7416 template<
typename T>
7418 const auto from_size=get_size_of_alloc(arg);
7419 const auto cut_size=from_size-to_size;
7420 if constexpr(move.
trivial<T>){
7421 ::std::memmove(arg,
add_const(arg+cut_size),to_size*
sizeof(T));
7422 realloc(arg,to_size);
7425 T*tmp=alloc<T>(to_size);
7426 if constexpr(!move.
nothrow<T>){
7427 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7429 move[to_size](note::from(arg+cut_size),note::to(tmp));
7435 move[to_size](note::from(arg+cut_size),note::to(tmp));
7442 template<
typename T>
7444 const auto from_size=get_size_of_alloc(arg);
7445 const auto grow_size=to_size-from_size;
7446 if constexpr(move.
trivial<T>){
7447 realloc(arg,to_size);
7448 ::std::memmove(arg+grow_size,
add_const(arg),from_size*
sizeof(T));
7451 T*tmp=alloc<T>(to_size);
7452 if constexpr(!move.
nothrow<T>){
7453 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7455 move[from_size](note::from(arg),note::to(tmp+grow_size));
7461 move[from_size](note::from(arg),note::to(tmp+grow_size));
7472 template<
typename T>
7474 const auto from_size=get_size_of_alloc(arg);
7475 const auto grow_size=to_size-from_size;
7476 const auto before_grow_size=grow_size-insert_size;
7477 const auto size_before_insert=insert_pos;
7478 const auto size_after_insert=from_size-insert_pos;
7479 if constexpr(move.
trivial<T>){
7480 realloc(arg,to_size);
7481 const auto orogin_data_ptr=arg+before_grow_size;
7482 ::std::memmove(orogin_data_ptr+size_before_insert+insert_size,arg+size_before_insert,size_after_insert*
sizeof(T));
7483 ::std::memmove(orogin_data_ptr,arg,size_before_insert*
sizeof(T));
7486 T*tmp=alloc<T>(to_size);
7487 if constexpr(!move.
nothrow<T>){
7488 template_warning(
"the move of T was not noexcept,this may cause memory lack.");
7490 const auto orogin_data_ptr=tmp+before_grow_size;
7491 move[size_before_insert](note::from(arg),note::to(orogin_data_ptr));
7492 move[size_after_insert](note::from(arg+size_before_insert),note::to(orogin_data_ptr+size_before_insert+insert_size));
7498 const auto orogin_data_ptr=tmp+before_grow_size;
7499 move[size_before_insert](note::from(arg),note::to(orogin_data_ptr));
7500 move[size_after_insert](note::from(arg+size_before_insert),note::to(orogin_data_ptr+size_before_insert+insert_size));
7505 return before_grow_size;
7509 template<
typename T>
7512 template<
class...Args>
7513 static constexpr bool able=construct<T>.able<Args...>&&destruct.
able<T>;
7514 template<
class...Args>
7515 static constexpr bool nothrow=construct<T>.nothrow<Args...>;
7517 template<
class...Args>
requires able<Args...>
7518 [[nodiscard]]T*
operator()(Args&&...rest)
const noexcept(nothrow<Args...>){
7520 return construct<T>[alloc<T>()](forward<Args>(rest)...);
7525 template<
class...Args>
requires able<Args...>
7526 [[nodiscard]]T*
operator()(Args&&...rest)
const noexcept(nothrow<Args...>){
7529 template_error(
"You can\'t get an array for never_in_array type.");
7530 return construct<T>[alloc<T>(_size)][_size](forward<Args>(rest)...);
7536 template<
typename U>
7537 static constexpr bool able=copy_construct.
able<T>&&destruct.
able<T>&&is_array_like_for<T,U>;
7538 template<
typename U>
7539 static constexpr bool nothrow=copy_construct.
nothrow<T>;
7544 template_error(
"You can\'t get an array for never_in_array type.");
7546 auto aret=alloc<T>[size]();
7547 copy_construct[size](note::from(a.begin()),note::to(aret));
7553 template<
typename U>
7554 static constexpr bool able=copy_construct.
able<T>&&move.
able<T>&&is_array_like_for<T,U>;
7555 template<
typename U>
7561 auto from_size=get_size_of_alloc(ptr);
7562 auto a_size=a.size();
7564 copy_construct[a_size](note::from(a.begin()),note::to(ptr+from_size));
7570 auto from_size=get_size_of_alloc(ptr);
7572 copy_construct(note::from(&a),note::to(ptr+from_size));
7578 auto from_size=get_size_of_alloc(ptr);
7580 move_construct(note::from(&a),note::to(ptr+from_size));
7586 template<
typename U>
7587 static constexpr bool able=destruct.
able<T>&&move.
able<T>&&is_array_like_for<T,U>;
7588 template<
typename U>
7593 auto ptr=from.value;
7594 auto from_size=get_size_of_alloc(ptr);
7595 T*ptr_to_a=in_range(a,{ptr,note::size(from_size)});
7596 auto a_size=a.size();
7600 destruct[a_size](ptr_to_a);
7601 move[(ptr+from_size)-(ptr_to_a+a_size)](note::from(ptr_to_a+a_size),note::to(ptr_to_a));
7607 template<
typename T>
7612 template<
typename T>
7613 static constexpr bool able=destruct.
able<T>;
7614 template<
typename T>
7615 static constexpr bool nothrow=destruct.
nothrow<T>;
7617 template<
typename T>
requires able<T>
7622 #
if defined(_MSC_VER)
7623 [[gsl::suppress(f.6)]]
7625 attribute_ptr_cast<abstract_base>(a)->abstract_method_unget_this();
7627 if constexpr(!destruct.
nothrow<T>)
7628 template_warning(
"the destructer of T was not noexcept,this may cause memory lack.");
7632 destruct[get_size_of_alloc(a)](a);
7638 template<
typename T>
requires able<T>
7639 void operator()(T*a,
decltype(destruct)::not_t)
const noexcept(nothrow<T>){
7646 template<
typename T>
7647 static constexpr bool able=construct<T>.
able<>&&destruct.
able<T>&&move.
able<T>;
7648 template<
typename T>
7651 template<
typename T>
requires able<T>
7652 static void base_call(T*&arg,
const size_t to_size)
noexcept(nothrow<T>){
7654 template_warning(
"For never_in_array type,get_resize will unget ptr when new_size=0 else do nothing.");
7660 arg=attribute_ptr_cast<abstract_base>(arg)->abstract_method_get_resize_this(to_size);
7662 const size_t from_size=get_size_of_alloc(arg);
7663 if(from_size==to_size)
7665 elseif(from_size > to_size){
7666 destruct[from_size-to_size](arg+to_size);
7670 construct<T>[arg+from_size][to_size-from_size]();
7672 arg=get<T>[to_size]();
7676 template<
typename T>
requires able<T>
7677 inline void operator()(T*&arg,
size_t to_size)
const noexcept(nothrow<T>){
7679 base_call(arg,to_size);
7681 template<
typename T>
requires able<T>
7682 [[nodiscard]]
inline T*
operator()(T*&&arg,
size_t to_size)
const noexcept(nothrow<T>){
7684 base_call(arg,to_size);
7689 template<
typename T>
7690 static constexpr bool able=get_resize_t::able<T>;
7691 template<
typename T>
7692 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7693 template<
typename T>
requires(able<T> && construct<T>.able<>)
7694 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size)
const noexcept(nothrow<T>){
7698 construct<T>[arg+insert_pos][insert_size]();
7701 template<
typename T>
requires(able<T> && copy_construct.
able<T>)
7702 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data)
const noexcept(nothrow<T>){
7706 copy_construct[insert_size](note::from(insert_data),note::to(arg+insert_pos));
7711 template<
typename T>
7712 static constexpr bool able=get_resize_t::able<T>;
7713 template<
typename T>
7714 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7715 template<
typename T>
requires(able<T> && construct<T>.able<> && copy_construct.
able<T>)
7716 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data,
size_t to_size)
const noexcept(nothrow<T>){
7719 copy_construct[insert_size](note::from(insert_data),note::to(arg+insert_pos));
7720 construct<T>[arg+to_size-end_grow_size][end_grow_size]();
7722 }insert_with_resize{};
7726 template<
typename T>
7727 static constexpr bool able=construct<T>.
able<>&&destruct.
able<T>&&move.
able<T>;
7728 template<
typename T>
7731 template<
typename T>
requires able<T>
7732 static void base_call(T*&arg,
const size_t to_size)
noexcept(nothrow<T>){
7735 template_warning(
"For never_in_array type,get_forward_resize will unget ptr when new_size=0 else do nothing.");
7741 arg=attribute_ptr_cast<abstract_base>(arg)->abstract_method_get_forward_resize_this(to_size);
7743 const size_t from_size=get_size_of_alloc(arg);
7744 if(from_size==to_size)
7746 elseif(from_size > to_size){
7747 destruct[from_size-to_size](arg);
7751 construct<T>[arg][to_size-from_size]();
7753 arg=get<T>[to_size]();
7757 template<
typename T>
requires able<T>
7758 inline void operator()(T*&arg,
size_t to_size)
const noexcept(nothrow<T>){
7759 base_call(arg,to_size);
7761 template<
typename T>
requires able<T>
7762 [[nodiscard]]
inline T*
operator()(T*&&arg,
size_t to_size)
const noexcept(nothrow<T>){
7763 base_call(arg,to_size);
7768 template<
typename T>
7769 static constexpr bool able=get_resize_t::able<T>;
7770 template<
typename T>
7771 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7772 template<
typename T>
requires(able<T> && construct<T>.able<>)
7773 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size)
const noexcept(nothrow<T>){
7777 template<
typename T>
requires(able<T> && copy_construct.
able<T>)
7778 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data)
const noexcept(nothrow<T>){
7784 template<
typename T>
7785 static constexpr bool able=get_resize_t::able<T>;
7786 template<
typename T>
7787 static constexpr bool nothrow=get_resize_t::nothrow<T>;
7788 template<
typename T>
requires(able<T> && construct<T>.able<> && copy_construct.
able<T>)
7789 void operator()(T*&arg,
size_t insert_pos,
size_t insert_size,
const T*insert_data,
size_t to_size)
const noexcept(nothrow<T>){
7793 const auto orogin_arg=arg+before_grow_size;
7794 copy_construct[insert_size](note::from(insert_data),note::to(orogin_arg+insert_pos));
7795 construct<T>[arg][before_grow_size]();
7798 }insert_with_resize{};
7799 }get_forward_resize{};
7802 template<
typename T>
7803 static constexpr bool able=
true;
7804 template<
typename T>
7805 static constexpr bool nothrow=
noexcept(get_size_of_alloc(
declvalue(
const T*)));
7807 template<
typename T>
requires able<T>
7810 return get_size_of_alloc(arg);
7813 template<
typename T>
requires able<T>
7815 return base_call(arg);
7820 template<
typename T>
7822 template<
typename T>
7823 static constexpr bool nothrow=copy_construct.
nothrow<T>;
7825 template<
typename T>
requires able<T>
7829 return remove_const(attribute_ptr_cast<abstract_base>(arg))->abstract_method_copy_get_this();
7831 return copy_construct(note::from(arg),note::to(copy_alloc(arg)),
get_size_of_get(arg));
7834 template<
typename T>
requires able<T>
7836 return base_call(arg);
7843 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7844 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_export.hpp"
7853 #define export using get_n::
7856 export get_forward_resize;
7865 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7866 #if defined(ELC_TEST_ON)
7867 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_test.hpp"
7881 ste::tester::setzero();
7882 tester*p=get<tester>[50]();
7883 stest_accert(tester::getbuildtime()==50);
7886 stest_accert(tester::getdestroytime()==50);
7887 stest_accert(tester::getbuildtime()==60);
7892 stest_accert(tester::getcalltime()==60);
7895 stest_accert(tester::getdestroytime()==110);
7897 check_memory_lack();
7899 inline void test_log_out(){
7901 inline void test_end(){
7908 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/get/_body.hpp"
7913 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
7914 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7924 namespace abstract_base_n{
7933 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/pointer_off_set.hpp"
7950 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7951 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/abstract_base_vtable.hpp"
7969 friend class get_n::unget_t;
7970 friend class get_n::get_resize_t;
7971 friend class get_n::get_size_of_get_t;
7972 friend class get_n::copy_get_t;
7977 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
7978 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/abstract_base.hpp"
7989 T* abstract_method_copy_get_this(){
7993 T* abstract_method_get_resize_this(
size_t size){
7997 T* abstract_method_get_forward_resize_this(
size_t size){
7999 return reinterpret_cast<T*
>(
get_ptr_after_off_set(this->_abstract_method_get_forward_resize_this(size)));
8010 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8011 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/instance_struct.hpp"
8026 if constexpr(copy_get.
able<T>){
8035 if constexpr(get_resize.
able<T>){
8044 if constexpr(get_forward_resize.
able<T>){
8046 return get_forward_resize(
get_handle(
this),size);
8058 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8060 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_export.hpp"
8069 #define export using abstract_base_n::
8076 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/abstract_base/_body.hpp"
8080 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8084 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8093 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8102 template<
typename T>
8105 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8114 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_t.hpp"
8129 constexpr inline void add_ref()const noexcept{_ref_num++;}
8130 [[nodiscard]]
inline bool cut_ref()const noexcept{
return!--_ref_num;}
8139 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8140 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_base.hpp"
8150 template<
typename T>
8155 template_error(
"this function should not be instantiated,please overload the function the_waiting_for_destroy in the namespace where this type is defined.");
8158 template<
typename T>
8165 template_error(
"please overload the function the_destroy_and_free in the namespace where this type is defined.");
8171 template<
typename T>
8173 template<
typename T>
8176 template<
typename T>
8178 if constexpr(!was_ref_able<T>)
8180 return attribute_ptr_cast<const ref_able>(a)->link_num();
8182 template<
typename T>
8184 if constexpr(!was_weak_ref_able<T>)
8186 return attribute_ptr_cast<const weak_ref_able>(a)->link_num();
8191 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8192 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/ref_able.hpp"
8201 template<
typename T>
8206 using base_t::base_t;
8209 if(base_t::cut_ref())
8210 if constexpr(was_weak_ref_able<T>)
8222 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8223 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/weak_ref_able.hpp"
8232 template<
typename T>
8238 if constexpr(!was_ref_able<T>)
8239 template_error(
"base on ref_able before base on weak_ref_able,please.");
8241 if(base_t::cut_ref())
8249 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ref/_body.hpp"
8253 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8254 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8263 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/base_ptr_t.hpp"
8280 [[nodiscard]]T*
get()const noexcept{
return _to;}
8282 template<
class T,
typename ref_type>
8290 static constexpr bool cut_nothrow=
noexcept(
declvalue(ref_type).cut_ref());
8292 static void cut_ref(T*a)
noexcept(cut_nothrow){attribute_ptr_cast<ref_type>(a)->cut_ref();}
8293 static void add_ref(T*a)
noexcept{attribute_ptr_cast<ref_type>(a)->add_ref();}
8299 template<
class T,
typename ref_type>
8304 template<
class T,
typename ref_type,
bool do_replace_check>
8311 using base_t::cut_nothrow;
8312 using same_ref::add_ref;
8313 using same_ref::cut_ref;
8314 using same_ref::swap_with;
8315 using same_ptr::_to;
8320 if constexpr(type_info<T>.has_attribute(
weak_ref_able) && type_info<ref_type> == type_info<ref_able<remove_cv<T>>>)
8324 add_ref(_to=null_ptr);
8351 static constexpr bool reset_nothrow=cut_nothrow;
8352 void reset(T*a)
const noexcept(reset_nothrow){
auto tmp=_to;add_ref(_to=a);cut_ref(tmp);}
8355 static constexpr bool replace_check_nothrow=(type_info<T>.not_has_attribute(
replace_able))||reset_nothrow;
8357 if constexpr(do_replace_check&&type_info<remove_cvref<T>>.has_attribute(
replace_able))
8358 if(attribute_ptr_cast<replace_able>(_to)->replaced())
8359 reset(attribute_ptr_cast<replace_able>(_to)->get_ptr());
8361 inline void do_replace(T*p)
noexcept(replace_check_nothrow&&reset_nothrow){
8362 if constexpr(type_info<remove_cvref<T>>.has_attribute(
replace_able)){
8363 attribute_ptr_cast<replace_able>(_to)->be_replace_as(p);
8367 template<
typename ref_type_,
bool do_replace_check_>
8369 do_replace(p.get());
8371 static constexpr bool get_nothrow=replace_check_nothrow;
8372 [[nodiscard]]T*
get()const noexcept(get_nothrow){
8374 return base_t::get();
8376 [[nodiscard]]
bool unique()const noexcept{
return attribute_ptr_cast<ref_able>(get())->link_num()==1;}
8377 [[nodiscard]]
constexpr
8380 using elc::defs::hash;
8393 template<
typename ref_type_,
bool do_replace_check_>
8401 template<
typename ref_type_,
bool do_replace_check_>
requires(type_info<remove_cv<T>>!=type_info<T>)
8409 template<
typename ref_type_,
bool do_replace_check_>
requires(type_info<remove_cv<T>>!=type_info<T>)
8419 template<
typename T_,
typename T,
typename ref_type,
bool do_replace_check,enable_if(type_info<T_>.base_on<T>)>
8421 return b.operator==(
static_cast<const T*
>(a));
8424 template<
typename T,
typename T_>
requires(
equal.
able<T,T_>)
8429 template<
class T,
typename ref_type,
bool do_replace_check>
8431 static_assert(type_info<T>.base_on<ref_type>);
8436 using base_t::reset;
8438 using same_ref::swap_with;
8439 using same_ptr::_to;
8441 using base_t::get_nothrow;
8442 using base_t::reset_nothrow;
8449 [[nodiscard]]T*
operator->()const noexcept(get_nothrow){
return get();}
8450 [[nodiscard]]T&
operator*()const noexcept(get_nothrow){
return*get();}
8451 [[nodiscard]]
explicit operator bool()const noexcept(get_nothrow){
return bool(
pointer_to_bool(get()));}
8453 [[nodiscard]]
explicit operator T*()
const noexcept(get_nothrow){
return get();}
8464 static inline thread_local class for_delete_t{
8466 friend class this_t;
8467 for_delete_t*operator()(T*a)
noexcept{
8473 destroy(
reinterpret_cast<for_delete_t*
>(a)->
_m);
8477 [[nodiscard]]
explicit operator bool()noexcept(get_nothrow){
return add_const(
this)->operator bool();}
8478 [[nodiscard]]
distinctive operator for_delete_t*()
noexcept(get_nothrow){
return for_delete(get());}
8480 template<
typename...Args>
requires(invoke<T>.able<Args...>)
8481 inline auto operator()(Args&&... rest)
noexcept(invoke<T>.nothrow<Args...>){
return(
operator*())(forward<Args>(rest)...);}
8486 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8487 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/comn_ptr_t.hpp"
8496 template<
typename T>
8501 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8502 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/weak_ptr_t.hpp"
8511 template<
typename T>
8516 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8517 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/nocheck_ptr_t.hpp"
8526 template<
typename T>
8531 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8532 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/deduction_guides.hpp"
8541 template<
class T,common_attribute_t ref_type,
bool has_check>
8544 template<
class T,common_attribute_t ref_type,
bool has_check>
8549 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/ptr/_body.hpp"
8553 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/defs.hpp"
8558 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8559 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_export.hpp"
8568 #define export using ptr_n::
8578 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8579 #if defined(ELC_TEST_ON)
8580 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_test.hpp"
8591 with_common_attribute<ref_able,weak_ref_able,never_in_array>,
build_by_get_only{};
8592 void waiting_for_destroy(tester*)
noexcept{}
8596 comn_ptr_t a=get<tester>();
8599 check_memory_lack();
8601 inline void test_log_out(){
8603 inline void test_end(){
8609 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/ptr/_body.hpp"
8614 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8616 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8625 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/replace_able.hpp"
8635 template<
typename T>
8643 attribute_ptr_cast<ref_able>(
_m)->cut_ref();
8650 return attribute_ptr_cast<replace_able>(
_m)->get_ptr();
8654 attribute_ptr_cast<ref_able>(
_m)->cut_ref();
8657 attribute_ptr_cast<ref_able>(
_m)->add_ref();
8664 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8666 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/can_map_all.hpp"
8675 template<
typename T>
8681 template<
class,
class func_t>
8685 type_list.add(
this);
8688 template<
class T,
class func_t>
8693 a(get_handle<T,can_map_all>(tmp++));
8696 #define expr declvalue(func_t)(declvalue(T*))
8697 template<
class T,
class func_t,enable_if(was_not_an_ill_form(expr))>
8699 map_all_helper<T,func_t>(forward<func_t>(a));
8705 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/other/_body.hpp"
8709 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8713 #if defined(ELC_TEST_ON)
8714 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_test.hpp"
8730 inline void test_log_out(){
8731 alloc_n::test_log_out();
8732 lifetime_n::test_log_out();
8733 get_n::test_log_out();
8736 inline void test_end(){
8737 alloc_n::test_end();
8738 lifetime_n::test_end();
8745 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/_body.hpp"
8750 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
8752 using namespace memory;
8754 namespace container{
8755 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
8764 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
8773 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/defs.hpp"
8783 template<
typename T>
8787 #if defined(DEBUG) || defined(_DEBUG)
8788 size_t _size_for_debug_view=0;
8791 #if defined(DEBUG) || defined(_DEBUG)
8793 constexpr array_t(T*a,
size_t s):
_m(a),_size_for_debug_view(s){}
8799 [[nodiscard]]
this_t copy()
const noexcept(copy_get.
nothrow<T>)
requires(copy_get.
able<T>){
8800 #if defined(DEBUG) || defined(_DEBUG)
8801 return{copy_get(
_m),_size_for_debug_view};
8803 return{copy_get(
_m)};
8809 #if defined(DEBUG) || defined(_DEBUG)
8810 swap(_size_for_debug_view,a._size_for_debug_view);
8820 _m=get<T>[size.value]();
8821 #if defined(DEBUG) || defined(_DEBUG)
8822 _size_for_debug_view=size.value;
8826 _m=get<T>[size.value](elem);
8827 #if defined(DEBUG) || defined(_DEBUG)
8828 _size_for_debug_view=size.value;
8835 template<
class U>
requires(get<T>.as_array.able<U>)
8836 array_t(U&&a)
noexcept(get<T>.as_array.nothrow<U>){
8837 _m=get<T>.as_array(forward<U>(a));
8838 #if defined(DEBUG) || defined(_DEBUG)
8839 _size_for_debug_view=size();
8846 return operator=(a.copy());
8857 [[nodiscard]]
size_t size()const noexcept{
8858 return get_size_of_get(
_m);
8861 return size()*
sizeof(T);
8863 static constexpr bool resize_nothrow = get_resize.
nothrow<T>;
8864 void resize(
size_t size)
noexcept(resize_nothrow){
8865 get_resize(
_m,size);
8866 #if defined(DEBUG) || defined(_DEBUG)
8867 _size_for_debug_view=size;
8870 static constexpr bool forward_resize_nothrow = get_forward_resize.
nothrow<T>;
8872 get_forward_resize(
_m,size);
8873 #if defined(DEBUG) || defined(_DEBUG)
8874 _size_for_debug_view=size;
8878 void insert(
size_t index,
size_t count)
noexcept(insert_nothrow){
8880 #if defined(DEBUG) || defined(_DEBUG)
8881 _size_for_debug_view+=count;
8884 void insert(
size_t index,
size_t count,
const T*data)
noexcept(insert_nothrow){
8885 get_resize.
insert(
_m,index,count,data);
8886 #if defined(DEBUG) || defined(_DEBUG)
8887 _size_for_debug_view+=count;
8892 #if defined(DEBUG) || defined(_DEBUG)
8893 _size_for_debug_view=new_size;
8899 #if defined(DEBUG) || defined(_DEBUG)
8900 _size_for_debug_view=new_size;
8904 return _m==null_ptr;
8911 [[nodiscard]]
explicit operator hash_t()const noexcept(
hash.nothrow<T>){
return hash(
_m,size());}
8912 [[nodiscard]]
explicit operator T*()
noexcept{
return _m;}
8913 [[nodiscard]]
explicit operator const T*()
const noexcept{
return _m;}
8925 return get_iterator_at(
zero);
8928 return get_iterator_at(size());
8931 return get_iterator_at(
zero);
8934 return get_iterator_at(size());
8956 #define expr declvalue(func_t)(declvalue(T&))
8961 func((*
this)[asize]);
8965 #define expr declvalue(func_t)(declvalue(const T&))
8970 func((*
this)[asize]);
8975 get<T>.apply_end(note::to<T*&>(
_m),a);
8976 #if defined(DEBUG) || defined(_DEBUG)
8977 _size_for_debug_view=size();
8981 get<T>.apply_end(note::to<T*&>(
_m),move(a));
8982 #if defined(DEBUG) || defined(_DEBUG)
8983 _size_for_debug_view=size();
8987 get<T>.remove(a,note::from(
_m));
8988 #if defined(DEBUG) || defined(_DEBUG)
8989 _size_for_debug_view=size();
8993 template<
class U,enable_if(get<T>.apply_end.able)>
8995 get<T>.apply_end(note::to(a._m),b);
9001 template<
typename U>
9005 template<
typename U>
9010 template<
typename U>
9016 template<
typename U>
9018 return in_range(*
this,a);
9020 template<
typename U>
9022 return in_range(*
this,a);
9025 template<
typename T>
9033 [[nodiscard]]
inline auto begin_of_array_like(
const array_t<
remove_cv<T>>&a)
noexcept{
return(
const T*)a.begin();}
9038 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9039 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/deduction_guides.hpp"
9049 template <
class T,
class...U>
9057 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9058 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_export.hpp"
9067 #define export using array_n::
9073 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9074 #if defined(ELC_TEST_ON)
9075 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_test.hpp"
9089 array_t<int>anarray;
9090 stest_accert(anarray.size()==0);
9092 stest_accert(anarray.size()==5);
9094 stest_accert(anarray[2]==99);
9096 stest_accert(anarray[2]==99);
9098 swap(anarray,anarray);
9100 check_memory_lack();
9102 inline void test_log_out(){
9104 inline void test_end(){
9111 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/array/_body.hpp"
9116 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
9117 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9126 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/base_function_t.hpp"
9135 namespace function_n{
9138 template<
class Ret_t,
class...Args_t>
9147 [[nodiscard]]virtual const
void*get_data_begin()const noexcept=0;
9148 [[nodiscard]]virtual
bool equal_with(const
void*)const=0;
9149 [[noreturn]] virtual
void throw_self_ptr()const=0;
9150 [[noreturn]] virtual
void throw_self_ptr()=0;
9151 [[nodiscard]]
bool operator==(const
this_t&a)
const{
9152 return this->get_type_info()==a.get_type_info()&&this->equal_with(a.get_data_begin());
9154 template<
typename T>
9156 return this->get_type_info()==type_info<T>&&this->equal_with(addressof(a));
9158 typedef Ret_t(*func_ptr_t)(Args_t...);
9162 template<
class T,
class Func_t>
9164 template<
class T,
class Ret_t,
class...Args_t>
9167 base_func_data_t<Ret_t(Args_t...)>,function_data_warpper_t<T,Ret_t(Args_t...)>{
9168 static_assert(!::std::is_function_v<T>);
9171 typedef function_data_warpper_t<T,Ret_t(Args_t...)>
data_t;
9177 using data_t::data_t;
9180 [[nodiscard]]
virtual const void*
get_data_begin()const noexcept override final{
return addressof(data_t::get_data());}
9181 [[noreturn]]
virtual void throw_self_ptr()const override final{
throw addressof(data_t::get_data());}
9182 [[noreturn]]
virtual void throw_self_ptr()override final{
throw addressof(data_t::get_data());}
9185 return data_t::get_data()==*
remove_const(
reinterpret_cast<const T*
>(a));
9189 [[nodiscard]]
virtual Ret_t
call(Args_t...args)noexcept(invoke<T>.nothrow<Args_t...>)override final{
9190 return data_t::operator()(forward<Args_t>(args)...);
9195 if constexpr(type_info<const T>.can_convert_to<
func_ptr_t>)
9196 return static_cast<func_ptr_t>(data_t::get_data());
9204 template<
class Ret_t,
class...Args_t>
9212 [[nodiscard]]
virtual const void*
get_data_begin()const noexcept override final{
return null_ptr;}
9213 [[noreturn]]
virtual void throw_self_ptr()const override final{
throw(
const void*)null_ptr;}
9215 [[nodiscard]]
virtual bool equal_with(
const void*)
const noexcept override final{
return true;}
9217 template<
class Ret_t,
class...Args_t>
9220 template<
class Ret_t,
class...Args_t>
9227 template<
class Ret_t,
class...Args_t>
9241 return *
_m==*(a.
_m);
9243 template<
typename T>
requires(
equal.
able<base_t_w,T>)
9247 template<
typename T>
9250 _m->throw_self_ptr();
9255 catch(
const void*){}
9258 template<
typename T>
9261 _m->throw_self_ptr();
9271 Ret_t
call(Args_t&&...rest)
const{
return _m->call(forward<Args_t>(rest)...);}
9274 #if !defined(_MSC_VER)
9275 template<
class T,
bool promise_nothrow_at_destruct>
9277 template<
class Ret_t,
class...Args_t,
bool nothrow,
bool promise_nothrow_at_destruct>
9283 template<class,
bool>
9289 typedef Ret_t(*func_ptr_t)(Args_t...)noexcept(nothrow);
9295 static constexpr
bool base_on_this_t_or_more_stringent_restrictions=(
9296 type_info<T>.base_on<
this_t>||
9297 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(
bool(nothrow+1)), promise_nothrow_at_destruct >>||
9298 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(nothrow),
bool(promise_nothrow_at_destruct+1) >>||
9299 type_info<T>.base_on<
base_function_t<Ret_t(Args_t...)noexcept(
bool(nothrow+1)),
bool(promise_nothrow_at_destruct+1) >>
9303 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9308 static
ptr_t get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9310 if constexpr(promise_nothrow_at_destruct and not destruct.
nothrow<T>)
9312 if constexpr(nothrow)
9313 if constexpr(!invoke<T>.nothrow<Args_t...>)
9314 template_warning(
"the call of T was not noexcept,this may cause terminate.");
9316 return get<func_data_t<remove_cvref<T>>>(a);
9321 base_t::swap_with(a);
9325 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9333 template<
class T>
requires(get_data_able<T>)
9335 _m=get_data_from(forward<T>(a));
9338 _m=get<func_data_t<func_ptr_t>>(a);
9342 this_t&operator=(const
this_t&a)&noexcept(promise_nothrow_at_destruct)=default;
9346 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9348 base_t::operator=(a);
9351 template<
class T>
requires(get_data_able<T>)
9352 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9353 _m=get_data_from(forward<T>(a));
9359 [[nodiscard]]
explicit operator bool()const noexcept{
9365 return base_t::call(forward<Args_t>(args)...);
9370 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9371 static inline ::std::atomic<
decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9372 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9373 if(!_func_ptr_data_local)
9374 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9375 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9381 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9382 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9384 _func_ptr_data_local=base_t::_m.get();
9385 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9386 return _func_ptr_value;
9391 template<
class T,
bool promise_nothrow_at_destruct>
9392 class base_function_t;
9393 template<
class Ret_t,
class...Args_t,
bool promise_nothrow_at_destruct>
9394 struct base_function_t<Ret_t(Args_t...),promise_nothrow_at_destruct>:function_data_saver_t<Ret_t(Args_t...)>{
9396 typedef function_data_saver_t<Ret_t(Args_t...)>base_t;
9397 typedef base_function_t<Ret_t(Args_t...),promise_nothrow_at_destruct>this_t;
9399 template<
class,
bool>
9400 friend class base_function_t;
9405 typedef Ret_t(*func_ptr_t)(Args_t...);
9407 using base_t::ptr_t;
9411 static constexpr bool base_on_this_t_or_more_stringent_restrictions=(
9412 type_info<T>.base_on<this_t>||
9413 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept, promise_nothrow_at_destruct >>||
9414 type_info<T>.base_on<base_function_t<Ret_t(Args_t...),
bool(promise_nothrow_at_destruct+1) >>||
9415 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept,
bool(promise_nothrow_at_destruct+1) >>
9419 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9421 static constexpr
bool get_data_nothrow=get<func_data_t<
remove_cvref<T>>>.nothrow<T>;
9423 template<class T> requires(get_data_able<T> && get<func_data_t<
remove_cvref<T>>>.able<T>)
9424 static auto get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9426 if constexpr(promise_nothrow_at_destruct and not destruct.
nothrow<T>)
9429 return get<func_data_t<remove_cvref<T>>>(a);
9431 explicit base_function_t(base_t::ptr_t a)
noexcept{
_m=a;}
9433 void swap_with(this_t&a)
noexcept{
9434 base_t::swap_with(a);
9437 base_function_t()noexcept=default;
9438 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9439 base_function_t(const T&a)noexcept:base_t(a){}
9446 template<
class T>
requires(get_data_able<T>)
9448 _m=get_data_from(forward<T>(a));
9451 _m=get<func_data_t<func_ptr_t>>(a);
9453 ~base_function_t()noexcept(promise_nothrow_at_destruct)=default;
9455 this_t&operator=(const this_t&a)noexcept(promise_nothrow_at_destruct)=default;
9456 this_t&operator=(this_t&&a)noexcept(promise_nothrow_at_destruct)=default;
9457 this_t&operator=(null_ptr_t)noexcept(promise_nothrow_at_destruct){
_m=
null_ptr;
return *
this;}
9458 this_t&operator=(nullptr_t)
noexcept(promise_nothrow_at_destruct){
return *
this=
null_ptr;}
9459 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9460 this_t&operator=(
const T&a)&
noexcept(promise_nothrow_at_destruct){
9461 base_t::operator=(a);
9464 template<
class T>
requires(get_data_able<T>)
9465 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9466 _m=get_data_from(forward<T>(a));
9470 this_t deep_copy(){
return this_t{
copy_get(
_m.get())};}
9472 [[nodiscard]]
explicit operator bool()const noexcept{
9476 Ret_t operator()(Args_t...args){
9477 return base_t::call(forward<Args_t>(args)...);
9479 Ret_t operator()(Args_t...args)
const{
9480 return base_t::call(forward<Args_t>(args)...);
9485 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9486 static inline ::std::atomic<
decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9487 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9488 if(!_func_ptr_data_local)
9489 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9490 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9496 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9497 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9499 _func_ptr_data_local=base_t::_m.get();
9500 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9501 return _func_ptr_value;
9504 template<
class Ret_t,
class...Args_t,
bool promise_nothrow_at_destruct>
9505 struct base_function_t<Ret_t(Args_t...)noexcept,promise_nothrow_at_destruct>:function_data_saver_t<Ret_t(Args_t...)>{
9507 typedef function_data_saver_t<Ret_t(Args_t...)>base_t;
9508 typedef base_function_t<Ret_t(Args_t...)noexcept,promise_nothrow_at_destruct>this_t;
9510 template<class,
bool>
9511 friend class base_function_t;
9514 using func_data_t=function_n::func_data_t<U,Ret_t(Args_t...)>;
9516 typedef Ret_t(*func_ptr_t)(Args_t...)noexcept;
9518 using base_t::ptr_t;
9522 static constexpr
bool base_on_this_t_or_more_stringent_restrictions=(
9523 type_info<T>.base_on<this_t>||
9524 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept, promise_nothrow_at_destruct >>||
9525 type_info<T>.base_on<base_function_t<Ret_t(Args_t...)noexcept,
bool(promise_nothrow_at_destruct+1) >>
9529 static constexpr
bool get_data_able=invoke<T>.able<Args_t...> && not base_on_this_t_or_more_stringent_restrictions<T>;
9531 static constexpr
bool get_data_nothrow=get<func_data_t<remove_cvref<T>>>.nothrow<T>;
9533 template<class T> requires(get_data_able<T> && get<func_data_t<remove_cvref<T>>>.able<T>)
9534 static auto get_data_from(T&&a)noexcept(get_data_nothrow<T>){
9539 if constexpr(!invoke<T>.nothrow<Args_t...>)
9540 template_warning(
"the call of T was not noexcept,this may cause terminate.");
9542 return get<func_data_t<remove_cvref<T>>>(a);
9546 void swap_with(this_t&a)
noexcept{
9547 base_t::swap_with(a);
9551 template<class T> requires base_on_this_t_or_more_stringent_restrictions<T>
9552 base_function_t(const T&a)noexcept:base_t(a){}
9559 template<
class T>
requires(get_data_able<T>)
9561 _m=get_data_from(forward<T>(a));
9564 _m=get<func_data_t<func_ptr_t>>(a);
9566 ~base_function_t()noexcept(promise_nothrow_at_destruct)=default;
9568 this_t&operator=(const this_t&a)&noexcept(promise_nothrow_at_destruct)=default;
9569 this_t&operator=(this_t&&a)&noexcept(promise_nothrow_at_destruct)=default;
9570 this_t&operator=(null_ptr_t)&noexcept(promise_nothrow_at_destruct){
_m=
null_ptr;
return *
this;}
9571 this_t&operator=(nullptr_t)&
noexcept(promise_nothrow_at_destruct){
return *
this=
null_ptr;}
9572 template<
class T>
requires base_on_this_t_or_more_stringent_restrictions<T>
9573 this_t&operator=(
const T&a)&
noexcept(promise_nothrow_at_destruct){
9574 base_t::operator=(a);
9577 template<
class T>
requires(get_data_able<T>)
9578 this_t&
operator=(T&&a)
noexcept(get_data_nothrow<T> && promise_nothrow_at_destruct){
9579 _m=get_data_from(forward<T>(a));
9583 this_t deep_copy(){
return this_t{
copy_get(
_m.get())};}
9585 [[nodiscard]]
explicit operator bool()const noexcept{
9589 Ret_t operator()(Args_t...args)noexcept{
9591 return base_t::call(forward<Args_t>(args)...);
9593 Ret_t operator()(Args_t...args)const noexcept{
9595 return base_t::call(forward<Args_t>(args)...);
9600 static thread_local inline base_t::base_t_w* _func_ptr_data_local=
nullptr;
9601 static inline ::std::atomic<decltype(_func_ptr_data_local)> _func_ptr_data_gobal=
nullptr;
9602 static Ret_t _func_ptr_value(Args_t...args)noexcept{
9603 if(!_func_ptr_data_local)
9604 _func_ptr_data_local=_func_ptr_data_gobal.load(::std::memory_order_relaxed);
9605 return _func_ptr_data_local->call(forward<Args_t>(args)...);
9611 [[nodiscard]]
explicit operator func_ptr_t()const noexcept(promise_nothrow_at_destruct){
9612 func_ptr_t a=(func_ptr_t)
_m->get_func_ptr();
9614 _func_ptr_data_local=base_t::_m.get();
9615 _func_ptr_data_gobal.store(_func_ptr_data_local,::std::memory_order_relaxed);
9616 return _func_ptr_value;
9620 template<
class T,
bool promise_nothrow_at_destruct>
9628 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9629 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/defs.hpp"
9638 namespace function_n{
9649 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9650 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/deduction_guides.hpp"
9659 namespace function_n{
9660 template<
typename T,
typename Func_t=get_function_type<T>,
bool promise_nothrow_at_destruct>
9666 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9667 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_export.hpp"
9676 #define export using function_n::
9683 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9684 #if defined(ELC_TEST_ON)
9685 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_test.hpp"
9694 namespace function_n{
9700 #if !defined(_MSC_VER)
9703 function_t<
void()
noexcept>
9707 stest_accert(tester==0);
9709 stest_accert(tester==1);
9710 #if !defined(_MSC_VER)
9721 stest_accert(tester==0);
9723 stest_accert(tester==1);
9729 check_memory_lack();
9731 inline void test_log_out(){
9733 inline void test_end(){
9740 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/function/_body.hpp"
9745 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
9747 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9757 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/base_stack.hpp"
9766 template<
typename T>
9795 swap(_size,a._size);
9805 return operator=(a.copy());
9811 while(
_m!=null_ptr){
9820 [[nodiscard]]
bool empty()const noexcept{
9821 return _m==null_ptr;
9823 template<
typename U>
9826 while(tmp!=null_ptr){
9837 return not in_stack(a);
9839 [[nodiscard]]
size_t size()const noexcept{
9844 void add(
const T&a)
noexcept(add_nothrow){
9845 _m=get<data_t>(a,
_m);
9850 template<
typename T_>
9853 while(tmp!=null_ptr){
9865 #define expr declvalue(func_t)(declvalue(T&))
9869 while(tmp!=null_ptr){
9876 #define expr declvalue(func_t)(declvalue(const T&))
9880 while(tmp!=null_ptr){
9909 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9910 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/auto_stack.hpp"
9919 template<
typename T>
9928 using base_t::base_t;
9933 template<
typename U>
9936 while(tmp!=null_ptr){
9952 return not in_stack(a);
9958 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
9960 #if defined(ELC_TEST_ON)
9961 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_test.hpp"
9974 stest_accert(a.size()==0);
9978 stest_accert(a.size()==3);
9980 stest_accert(a.size()==2);
9983 stest_accert(add_num==4);
9984 auto_stack_t<int>b=a;
9985 stest_accert(b.not_in_stack(2));
9987 stest_accert(a.in_stack(3));
9991 stest_accert(b.size()==0);
9993 check_memory_lack();
9995 inline void test_log_out(){
9997 inline void test_end(){
10002 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
10005 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_export.hpp"
10014 #define export using stack_n::
10021 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/stacks/_body.hpp"
10025 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10026 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10035 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/defs.hpp"
10044 namespace hash_table_n{
10045 template<
typename T,
template<
typename>
class stack_t=auto_stack_t,
size_t bucket_max_size=256>
10048 typedef stack_t<T>bucket_t;
10056 [[nodiscard]]bucket_t&find_bucket(
hash_t a)
noexcept{
10057 return _m[a%
_m.size()];
10059 void bucket_count_grow()noexcept{
10060 this_t tmp(special_init,get_next_gold_size_to_resize_for_hash(
_m.size()));
10061 for(bucket_t&a:
_m){
10063 a.move_top_to(tmp.find_bucket(a.get_top_hash()));
10067 hash_table_t(
const base_t_w&a)
noexcept:
_m(a){}
10068 this_t copy()noexcept(copy_construct.nothrow<base_t_w>){
10091 template<
typename U>
10093 template<
typename U>
10096 void add(
const T&a)
noexcept(hash_nothrow<const T&>&&bucket_t::add_nothrow){
10097 auto&bucket=find_bucket(
hash(a));
10099 if(bucket.size() > bucket_max_size)
10100 bucket_count_grow();
10102 bool remove(
const T&a)
noexcept(bucket_t::remove_nothrow){
10103 auto&bucket=find_bucket(
hash(a));
10104 bool remove_success=bucket.remove(a);
10105 if constexpr(is_unstable_hash<T>)
10106 if(not remove_success){
10108 if(
is_eq(i,bucket))
10110 remove_success=i.remove(a);
10115 return remove_success;
10117 template<
typename U>
10119 auto&bucket=find_bucket(
hash(a));
10121 auto reference=bucket.find(a);
10122 if constexpr(is_unstable_hash<T>)
10123 if(reference.fail()){
10125 if(
is_eq(i,bucket))
10127 re_construct[&reference](i.find(a));
10128 if(reference.not_fail())
10135 return find(a).not_fail();
10138 return not in_table(a);
10143 for(
const bucket_t&a:
_m){
10150 re_construct(
this);
10153 #define expr declvalue(func_t)(declvalue(T&))
10156 for(bucket_t&a:
_m){
10162 #define expr declvalue(func_t)(declvalue(const T&))
10165 for(bucket_t&a:
_m){
10171 #define expr declvalue(func_t)(declvalue(bucket_t&))
10178 #define expr declvalue(func_t)(declvalue(const bucket_t&))
10185 template<
typename T,
template<
typename>
class stack_t,
size_t _,
size_t __>
10187 template<
typename T,
template<
typename>
class stack_t,
size_t _>
10189 template<
typename T,
template<
typename>
class stack_t,
size_t _>
10195 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10196 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_export.hpp"
10205 #define export using hash_table_n::
10211 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10212 #if defined(ELC_TEST_ON)
10213 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_test.hpp"
10222 namespace hash_table_n{
10224 inline void test(){
10229 check_memory_lack();
10231 inline void test_log_out(){
10233 inline void test_end(){
10240 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/hash_table/_body.hpp"
10245 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10247 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10256 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/defs.hpp"
10266 template<
typename T,
typename key_t,
template<
typename>
class stack_t=auto_stack_t,
size_t bucket_max_size=256>
10274 data_t(
const data_t&) =
default;
10275 data_t(
const key_t&a,
const T&b)
noexcept(copy_construct.
nothrow<key_t> && copy_construct.
nothrow<T>):_key(a),_value(b){}
10281 return bool(a._value==*
_m);
10286 return bool(_key==a);
10294 [[nodiscard]]
bool empty(){
10295 return _value==const_default_value_of<T>;
10298 typedef hash_table_t<data_t,stack_t,bucket_max_size>base_t_w;
10300 mutable base_t_w
_m;
10302 map_t(
const base_t_w&a)
noexcept:
_m(a){}
10303 this_t copy()noexcept(copy_construct.nothrow<base_t_w>){
10308 ~
map_t()noexcept(destruct.nothrow<base_t_w>)=default;
10317 return operator=(a.copy());
10324 auto tmp=
_m.find(a);
10329 return tmp.get_ref()._value;
10332 auto tmp=
_m.find(a);
10333 return tmp.fail()?const_default_value_of<T>:tmp.get_ref()._value;
10336 re_construct(
this);
10339 #define expr declvalue(func_t)(declvalue(T&))
10348 #define expr declvalue(func_t)(declvalue(const T&))
10352 func(add_const<T&>(a._value));
10357 static constexpr bool shrink_nothow=stack_t<data_t>::remove_nothrow;
10360 while(a.remove(data_t::seek_value_t(const_default_value_of<T>)));
10369 if(size()!=a.size())
10373 if(a[b._key]!=b._value)
10374 throw (
this_t*)(
nullptr);
10383 template<
typename T,
typename key_t,
template<
typename>
class stack_t,
size_t _,
size_t __>
10389 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10390 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_export.hpp"
10399 #define export using map_n::
10405 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10406 #if defined(ELC_TEST_ON)
10407 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_test.hpp"
10418 inline void test(){
10423 check_memory_lack();
10425 inline void test_log_out(){
10427 inline void test_end(){
10434 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/map/_body.hpp"
10439 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10441 #if defined(ELC_TEST_ON)
10442 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_test.hpp"
10451 inline void test(){
10454 function_n::test();
10457 inline void test_log_out(){
10458 array_n::test_log_out();
10459 function_n::test_log_out();
10460 stack_n::test_log_out();
10462 inline void test_end(){
10463 array_n::test_end();
10464 function_n::test_end();
10465 stack_n::test_end();
10470 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/container/_body.hpp"
10475 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
10477 using namespace container;
10479 namespace memory::gc_n{
10481 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10490 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10499 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/roots/_body.hpp"
10510 template<
typename T>
10513 template<
typename T>
10519 base_stack_t<value_t>_roots;
10538 template<
typename T>
10541 template<
typename T>
10546 roots_of<T>.add(
this);
10548 virtual T& get()noexcept=0;
10549 virtual
void map_and_mark()noexcept=0;
10551 template<typename T>
10552 inline T&
root_of<T>::get()noexcept{
return const_default_value_of<T>;}
10553 template<
typename T>
10558 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10559 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/mark_able_for_gc/_body.hpp"
10568 template<
typename T>
10576 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10577 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/others/_body.hpp"
10591 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_flags/_body.hpp"
10595 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10597 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10606 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/default_method/decl.hpp"
10615 template<
class T,enable_flag>
10618 [[nodiscard]]inline
bool gc_success_identifier_of()noexcept;
10622 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10624 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/defs.hpp"
10635 typedef function_t<
void()
noexcept>gc_method_t;
10636 typedef function_t<bool()
noexcept>success_identifier_t;
10638 base_stack_t<gc_method_t>_gc_methods;
10639 base_stack_t<success_identifier_t>_gc_success_identifiers;
10646 if(_gc_methods.empty())
10647 die_with(locale::str::empty_gc_method);
10648 _gc_methods.for_each(invoke<const gc_method_t>._as(
nothing));
10649 _gc_running.
unset();
10652 bool success=_gc_success_identifiers.empty();
10653 _gc_success_identifiers.for_each(
10663 _gc_methods.add(a);
10666 _gc_methods.remove(a);
10670 _gc_success_identifiers.add(a);
10673 _gc_success_identifiers.remove(a);
10678 add_gc_method((
void(*)()
noexcept)gc_method_of<T>);
10679 add_gc_success_identifier(gc_success_identifier_of<T>);
10683 remove_gc_method(gc_method_of<T>);
10684 remove_gc_success_identifier(gc_success_identifier_of<T>);
10690 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10692 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/default_method/defs.hpp"
10701 namespace default_gc_for_type{
10702 template<
class T,enable_if(type_info<T>.has_attribute(count_able))>
10724 template_error(
"this function should not be instantiated,please overload the function destory_by_gc in the namespace where this type is defined.");
10727 template<
class T>
requires use_default_gc_able<T>
10729 constexpr auto&info=type_info<T>;
10731 if constexpr(info.has_attribute(
count_able))
10736 roots_of<T>.map_and_mark();
10740 if constexpr(info.has_attribute(
can_shrink))
10743 auto& b=attribute_cast<mark_able_for_gc>(*a);
10757 template<
class T>
requires use_default_gc_success_identifier_able<T>
10759 constexpr auto&info=type_info<T>;
10760 if constexpr(info.has_attribute(
count_able)){
10765 template<
class T,enable_if(default_gc_for_type::use_default_gc_able<T>)>
10767 default_gc_for_type::default_gc_method<T>();
10769 template<
class T,enable_if(default_gc_for_type::use_default_gc_success_
identifier_able<T>)>
10771 return default_gc_for_type::default_gc_success_identifier<T>();
10776 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_t/_body.hpp"
10780 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10782 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/defs.hpp"
10795 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10798 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/gc_for_alloc/_body.hpp"
10813 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10814 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10826 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/defs.hpp"
10836 template<
typename T>
10838 template_error(
"this function should not be instantiated,please overload the function map_and_mark_for_gc in the namespace where this type is defined");
10840 using ::elc::defs::memory::gc_n::root_of;
10843 comn_ptr_t<T>::replace_check_nothrow &&
10853 base_t::operator=(forward<assign_t>(a));
10856 virtual T&
get()noexcept
override{
10857 return base_t::operator*();
10866 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10867 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/deduction_guides.hpp"
10881 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10885 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_export.hpp"
10895 #define export using memory::ptr_n::
10902 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/root_ptr/_body.hpp"
10908 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10910 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_export.hpp"
10921 #define export using gc_n::
10925 export mark_able_for_gc;
10933 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
10935 #if defined(ELC_TEST_ON)
10936 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_test.hpp"
10945 #if!defined(_MSC_VER)
10947 with_common_attribute<can_map_all,can_shrink,count_able,mark_able_for_gc,never_in_array,ref_able>,
10951 ~gc_tester()
noexcept{destroy_time++;}
10955 static void reset_times(){
10956 shrink_time=destroy_time=0;
10960 void map_and_mark_for_gc(gc_tester*a){
10961 attribute_ptr_cast<mark_able_for_gc>(a)->mark();
10963 void destory_by_gc(gc_tester*a){
10967 inline void test(){
10968 #if!defined(_MSC_VER)
10972 using ::std::srand;
10973 srand((
unsigned)time(
nullptr));
10975 for(
int t=rand()%7;t--;)
10978 root_ptr_t<gc_tester> name=get<gc_tester>();
10979 for(i=rand()%72;i--;){
10980 #pragma warning(suppress: 4189)
10981 auto p=get<gc_tester>();
10984 stest_accert(gc_tester::shrink_time==i+1);
10985 stest_accert(gc_tester::destroy_time==i);
10986 stest_accert(get_size_of_get(&*name)==1);
10988 check_memory_lack();
10991 inline void test_log_out(){
10994 inline void test_end(){
11000 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/memory/gc/_body.hpp"
11005 #line 40 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11007 using namespace memory;
11009 #if defined(ELC_TEST_ON)
11010 namespace base_part_test{
11011 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_test.hpp"
11020 inline void test(){
11026 inline void test_log_out(){
11027 memory::test_log_out();
11028 container::test_log_out();
11030 inline void test_end(){
11031 memory::test_end();
11032 container::test_end();
11037 #line 46 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11041 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11049 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
11060 #if defined(_MSC_VER)
11061 #pragma warning(pop)
11063 #undef suppress_msvc_warning
11064 #undef disable_msvc_warning
11065 #undef push_msvc_warning
11066 #undef pop_msvc_warning
11067 #undef push_and_disable_msvc_warning
11070 #undef BIT_POSSIBILITY
11072 #if defined(ELC_VOID_NAME)
11073 #define void the_void
11078 #undef noexcept_as_auto
11079 #undef constexpr_as
11080 #undef constexpr_as_auto
11082 #undef using_method_from_base_t
11083 #undef using_method_from_value
11088 #undef re_declvalue
11093 #undef template_error
11094 #undef template_warning
11096 #undef type_info_of
11097 #undef type_name_of
11099 #undef is_common_attribute
11100 #undef is_special_attribute
11102 #undef has_attribute
11103 #undef not_has_attribute
11105 #undef float_size_of
11108 #undef def_common_attribute_with_nothing
11109 #undef def_special_attribute_with_nothing
11111 #undef common_attribute_t
11112 #undef special_attribute_t
11115 #undef enabled_by_default
11116 #undef disabled_by_default
11117 #undef enable_if_not_ill_form
11120 #undef was_an_ill_form
11121 #undef was_an_ill_form_with_parameter
11122 #undef was_not_an_ill_form
11123 #undef was_not_an_ill_form_and_noexcept
11124 #undef was_not_an_ill_form_with_parameter
11126 #undef recursive_lambda
11127 #undef get_recursive_lambda_caller
11129 #undef lambda_with_catch
11130 #undef self_recursion
11131 #undef lambda_RLSRRS
11139 #undef _small_than_
11141 #if defined(_MSC_VER)
11147 #undef INTER_NAMESPACE
11148 #undef BREAK_NAMESPACE
11153 #undef template_name
11156 #undef not_in_debug
11161 #undef ELC_TEST_EVENTNAME
11163 #undef override_instance_struct
11167 #undef force_inline
11169 #undef with_no_vtable
11171 #undef in_consteval
11173 #undef no_vtable_struct
11174 #undef no_vtable_class
11178 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11182 #line 50 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11186 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_export.hpp"
11195 #define export using defs::base::
11200 #line 53 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base/_body.hpp"
11205 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
11210 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11211 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
11220 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
11224 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11225 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11234 #if !defined(ELC_BASE_EXCEPTION)
11235 #define ELC_BASE_EXCEPTION
11236 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
11249 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
11253 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11254 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11263 #if defined(ELC_TEST)
11264 #error "this part cannot be tested."
11267 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
11277 typedef char32_t char_t;
11279 typedef int64_t
int_t;
11281 typedef uint64_t
uint_t;
11290 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11292 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11300 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11312 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11314 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
11325 #define BIT_POSSIBILITY 2
11329 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11331 #if defined(_MSC_VER)
11332 #pragma warning(push,ELC_WARNING_LEVEL)
11333 #pragma warning(disable:4099)
11334 #pragma warning(disable:26812)
11335 #pragma warning(disable:4584)
11336 #pragma warning(disable:4250)
11337 #pragma warning(disable:26432)
11338 #pragma warning(disable:26435)
11339 #pragma warning(disable:26481)
11340 #pragma warning(disable:26446)
11341 #pragma warning(disable:26434)
11342 #pragma warning(disable:26429)
11343 #pragma warning(disable:26471)
11344 #pragma warning(disable:26474)
11345 #pragma warning(disable:26473)
11346 #pragma warning(disable:26456)
11347 #pragma warning(disable:26485)
11348 #pragma warning(disable:26490)
11349 #pragma warning(disable:26472)
11350 #pragma warning(disable:26482)
11351 #pragma warning(disable:26493)
11353 #if defined(_MSC_VER)
11354 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
11355 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
11356 #define push_msvc_warning() __pragma(warning(push))
11357 #define pop_msvc_warning() __pragma(warning(pop))
11358 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
11360 #define suppress_msvc_warning(...)
11361 #define disable_msvc_warning(...)
11362 #define push_msvc_warning()
11363 #define pop_msvc_warning()
11364 #define push_and_disable_msvc_warning(...)
11367 #if defined(ELC_VOID_NAME)
11372 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
11373 #define noexcept_as_auto MAGIC
11374 #define constexpr_as(...) MAGIC constexpr
11375 #define constexpr_as_auto MAGIC MAGIC constexpr
11377 #define using_method_from_base_t(name,...) \
11378 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
11379 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
11381 return base_t::name(forward<Args>(rest)...);\
11384 #define using_method_from_value(name,value_name,...) \
11385 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
11386 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
11388 return value_name.name(forward<Args>(rest)...);\
11391 #define floop while(__builtin_is_my_dick_still_there())
11392 #define enable_adl(name) void name()noexcept=delete
11394 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
11395 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
11397 #define declvalue(...) (::std::declval<__VA_ARGS__>())
11400 #define template_error(reason) static_assert(template_error_helper<T>,reason)
11402 #define template_warning(reason) template_warning_helper<T>(reason)
11405 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
11406 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
11408 #define is_common_attribute(name) public attribute<T,name<T>>
11409 #define is_special_attribute(name) public attribute<T,name>
11411 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
11412 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
11415 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
11417 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
11420 #define def_common_attribute_with_nothing(name) \
11421 template<typename T>\
11424 #define def_special_attribute_with_nothing(name) \
11427 #define common_attribute_t template<class>class
11428 #define special_attribute_t class
11438 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
11440 #define enabled_by_default class enable_state=void
11442 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
11444 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
11446 #define enable_flag class enable_state
11448 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
11449 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
11450 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
11451 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
11452 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
11455 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
11457 #define get_recursive_lambda_caller(name) \
11458 lambda_with_catch(&)(auto&&...Args){\
11459 return name(name,Args...);\
11464 #define lambda_with_catch(...) [__VA_ARGS__]
11466 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
11468 #define lambda_RLSRRS _my_jb_super_sb_name_
11476 #define elseif else if
11478 #define _big_than_ >
11480 #define _small_than_ <
11482 #if defined(_MSC_VER)
11489 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
11491 #define BREAK_NAMESPACE }
11494 #define template_name template
11496 #define type_name class
11498 #if defined(DEBUG) || defined(_DEBUG)
11499 #define not_in_debug 0
11501 #define not_in_debug 1
11505 #define ec(ch) U ## ch
11507 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
11508 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
11510 #define ELC_TEST_EVENTNAME(name)
11513 #define override_instance_struct \
11515 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
11516 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
11517 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
11518 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
11519 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
11521 #if defined(_WIN32)
11522 #define distinctive __declspec(dllexport)
11524 #define distinctive
11527 #if defined(_WIN32)
11528 #define force_inline __forceinline
11529 #elif defined(__GNUC__)
11530 #define force_inline __attribute__((always_inline)) inline
11532 #define force_inline inline
11535 #if defined(_WIN32)
11536 #define with_no_vtable __declspec(novtable)
11538 #define with_no_vtable
11541 #define in_consteval (::std::is_constant_evaluated())
11543 #define no_vtable_struct struct with_no_vtable
11544 #define no_vtable_class class with_no_vtable
11548 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11552 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11554 namespace exception_n{
11555 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/_body.hpp"
11564 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/exception.hpp"
11574 const char_t* _constexpr_str=locale::str::exception::unknow_error;
11579 virtual constexpr const
char_t*what()noexcept{
return _constexpr_str;}
11581 inline constexpr exception::~exception()noexcept{}
11584 using exception::exception;
11589 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/exception/_body.hpp"
11593 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11595 namespace exceptions=exception_n;
11597 #if defined(ELC_TEST_ON)
11598 namespace base_exception_part_test{
11599 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_test.hpp"
11607 inline void test(){
11610 inline void test_log_out(){
11612 inline void test_end(){
11617 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11621 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11629 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
11640 #if defined(_MSC_VER)
11641 #pragma warning(pop)
11643 #undef suppress_msvc_warning
11644 #undef disable_msvc_warning
11645 #undef push_msvc_warning
11646 #undef pop_msvc_warning
11647 #undef push_and_disable_msvc_warning
11650 #undef BIT_POSSIBILITY
11652 #if defined(ELC_VOID_NAME)
11653 #define void the_void
11658 #undef noexcept_as_auto
11659 #undef constexpr_as
11660 #undef constexpr_as_auto
11662 #undef using_method_from_base_t
11663 #undef using_method_from_value
11668 #undef re_declvalue
11673 #undef template_error
11674 #undef template_warning
11676 #undef type_info_of
11677 #undef type_name_of
11679 #undef is_common_attribute
11680 #undef is_special_attribute
11682 #undef has_attribute
11683 #undef not_has_attribute
11685 #undef float_size_of
11688 #undef def_common_attribute_with_nothing
11689 #undef def_special_attribute_with_nothing
11691 #undef common_attribute_t
11692 #undef special_attribute_t
11695 #undef enabled_by_default
11696 #undef disabled_by_default
11697 #undef enable_if_not_ill_form
11700 #undef was_an_ill_form
11701 #undef was_an_ill_form_with_parameter
11702 #undef was_not_an_ill_form
11703 #undef was_not_an_ill_form_and_noexcept
11704 #undef was_not_an_ill_form_with_parameter
11706 #undef recursive_lambda
11707 #undef get_recursive_lambda_caller
11709 #undef lambda_with_catch
11710 #undef self_recursion
11711 #undef lambda_RLSRRS
11719 #undef _small_than_
11721 #if defined(_MSC_VER)
11727 #undef INTER_NAMESPACE
11728 #undef BREAK_NAMESPACE
11733 #undef template_name
11736 #undef not_in_debug
11741 #undef ELC_TEST_EVENTNAME
11743 #undef override_instance_struct
11747 #undef force_inline
11749 #undef with_no_vtable
11751 #undef in_consteval
11753 #undef no_vtable_struct
11754 #undef no_vtable_class
11758 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
11762 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11765 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_export.hpp"
11774 #define export using defs::exception_n::
11776 export runtime_exception;
11781 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_exception/_body.hpp"
11786 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
11791 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
11792 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
11801 #if !defined(ELC_BASE_STREAM)
11802 #define ELC_BASE_STREAM
11803 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
11812 #if defined(ELC_TEST)
11813 #error "this part cannot be tested."
11816 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
11824 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11836 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11838 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
11849 #define BIT_POSSIBILITY 2
11853 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
11855 #if defined(_MSC_VER)
11856 #pragma warning(push,ELC_WARNING_LEVEL)
11857 #pragma warning(disable:4099)
11858 #pragma warning(disable:26812)
11859 #pragma warning(disable:4584)
11860 #pragma warning(disable:4250)
11861 #pragma warning(disable:26432)
11862 #pragma warning(disable:26435)
11863 #pragma warning(disable:26481)
11864 #pragma warning(disable:26446)
11865 #pragma warning(disable:26434)
11866 #pragma warning(disable:26429)
11867 #pragma warning(disable:26471)
11868 #pragma warning(disable:26474)
11869 #pragma warning(disable:26473)
11870 #pragma warning(disable:26456)
11871 #pragma warning(disable:26485)
11872 #pragma warning(disable:26490)
11873 #pragma warning(disable:26472)
11874 #pragma warning(disable:26482)
11875 #pragma warning(disable:26493)
11877 #if defined(_MSC_VER)
11878 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
11879 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
11880 #define push_msvc_warning() __pragma(warning(push))
11881 #define pop_msvc_warning() __pragma(warning(pop))
11882 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
11884 #define suppress_msvc_warning(...)
11885 #define disable_msvc_warning(...)
11886 #define push_msvc_warning()
11887 #define pop_msvc_warning()
11888 #define push_and_disable_msvc_warning(...)
11891 #if defined(ELC_VOID_NAME)
11896 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
11897 #define noexcept_as_auto MAGIC
11898 #define constexpr_as(...) MAGIC constexpr
11899 #define constexpr_as_auto MAGIC MAGIC constexpr
11901 #define using_method_from_base_t(name,...) \
11902 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
11903 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
11905 return base_t::name(forward<Args>(rest)...);\
11908 #define using_method_from_value(name,value_name,...) \
11909 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
11910 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
11912 return value_name.name(forward<Args>(rest)...);\
11915 #define floop while(__builtin_is_my_dick_still_there())
11916 #define enable_adl(name) void name()noexcept=delete
11918 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
11919 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
11921 #define declvalue(...) (::std::declval<__VA_ARGS__>())
11924 #define template_error(reason) static_assert(template_error_helper<T>,reason)
11926 #define template_warning(reason) template_warning_helper<T>(reason)
11929 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
11930 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
11932 #define is_common_attribute(name) public attribute<T,name<T>>
11933 #define is_special_attribute(name) public attribute<T,name>
11935 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
11936 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
11939 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
11941 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
11944 #define def_common_attribute_with_nothing(name) \
11945 template<typename T>\
11948 #define def_special_attribute_with_nothing(name) \
11951 #define common_attribute_t template<class>class
11952 #define special_attribute_t class
11962 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
11964 #define enabled_by_default class enable_state=void
11966 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
11968 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
11970 #define enable_flag class enable_state
11972 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
11973 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
11974 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
11975 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
11976 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
11979 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
11981 #define get_recursive_lambda_caller(name) \
11982 lambda_with_catch(&)(auto&&...Args){\
11983 return name(name,Args...);\
11988 #define lambda_with_catch(...) [__VA_ARGS__]
11990 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
11992 #define lambda_RLSRRS _my_jb_super_sb_name_
12000 #define elseif else if
12002 #define _big_than_ >
12004 #define _small_than_ <
12006 #if defined(_MSC_VER)
12013 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
12015 #define BREAK_NAMESPACE }
12018 #define template_name template
12020 #define type_name class
12022 #if defined(DEBUG) || defined(_DEBUG)
12023 #define not_in_debug 0
12025 #define not_in_debug 1
12029 #define ec(ch) U ## ch
12031 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
12032 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
12034 #define ELC_TEST_EVENTNAME(name)
12037 #define override_instance_struct \
12039 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
12040 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
12041 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
12042 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
12043 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
12045 #if defined(_WIN32)
12046 #define distinctive __declspec(dllexport)
12048 #define distinctive
12051 #if defined(_WIN32)
12052 #define force_inline __forceinline
12053 #elif defined(__GNUC__)
12054 #define force_inline __attribute__((always_inline)) inline
12056 #define force_inline inline
12059 #if defined(_WIN32)
12060 #define with_no_vtable __declspec(novtable)
12062 #define with_no_vtable
12065 #define in_consteval (::std::is_constant_evaluated())
12067 #define no_vtable_struct struct with_no_vtable
12068 #define no_vtable_class class with_no_vtable
12072 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12076 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12078 namespace stream_n{
12079 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/base_streams/_body.hpp"
12101 virtual void write(
const byte*buf,
size_t size)=0;
12109 virtual size_t read(
byte*buf,
size_t size)=0;
12112 return this->read(
cast_to_data(v),size*
sizeof(T))/
sizeof(T);
12121 virtual
void*tell()noexcept
override{
return this->seek(
cur,0);}
12123 virtual void sync()noexcept override=0;
12124 virtual
void flush()noexcept override=0;
12125 virtual
void close()noexcept override=0;
12128 virtual void write(
const byte*buf,
size_t size)
noexcept override=0;
12130 void write(
const T*v,
size_t size=1)noexcept{
12135 virtual size_t read(
byte*buf,
size_t size)
noexcept override=0;
12137 size_t read(T*v,
size_t size=1)noexcept{
12138 return this->read(
cast_to_data(v),size*
sizeof(T))/
sizeof(T);
12168 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12170 using namespace stream_n;
12172 #if defined(ELC_TEST_ON)
12173 namespace base_stream_part_test{
12174 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_test.hpp"
12182 inline void test(){
12185 inline void test_log_out(){
12187 inline void test_end(){
12192 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12196 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
12204 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
12215 #if defined(_MSC_VER)
12216 #pragma warning(pop)
12218 #undef suppress_msvc_warning
12219 #undef disable_msvc_warning
12220 #undef push_msvc_warning
12221 #undef pop_msvc_warning
12222 #undef push_and_disable_msvc_warning
12225 #undef BIT_POSSIBILITY
12227 #if defined(ELC_VOID_NAME)
12228 #define void the_void
12233 #undef noexcept_as_auto
12234 #undef constexpr_as
12235 #undef constexpr_as_auto
12237 #undef using_method_from_base_t
12238 #undef using_method_from_value
12243 #undef re_declvalue
12248 #undef template_error
12249 #undef template_warning
12251 #undef type_info_of
12252 #undef type_name_of
12254 #undef is_common_attribute
12255 #undef is_special_attribute
12257 #undef has_attribute
12258 #undef not_has_attribute
12260 #undef float_size_of
12263 #undef def_common_attribute_with_nothing
12264 #undef def_special_attribute_with_nothing
12266 #undef common_attribute_t
12267 #undef special_attribute_t
12270 #undef enabled_by_default
12271 #undef disabled_by_default
12272 #undef enable_if_not_ill_form
12275 #undef was_an_ill_form
12276 #undef was_an_ill_form_with_parameter
12277 #undef was_not_an_ill_form
12278 #undef was_not_an_ill_form_and_noexcept
12279 #undef was_not_an_ill_form_with_parameter
12281 #undef recursive_lambda
12282 #undef get_recursive_lambda_caller
12284 #undef lambda_with_catch
12285 #undef self_recursion
12286 #undef lambda_RLSRRS
12294 #undef _small_than_
12296 #if defined(_MSC_VER)
12302 #undef INTER_NAMESPACE
12303 #undef BREAK_NAMESPACE
12308 #undef template_name
12311 #undef not_in_debug
12316 #undef ELC_TEST_EVENTNAME
12318 #undef override_instance_struct
12322 #undef force_inline
12324 #undef with_no_vtable
12326 #undef in_consteval
12328 #undef no_vtable_struct
12329 #undef no_vtable_class
12333 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
12337 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12340 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_export.hpp"
12349 #define export using defs::
12355 export noexcept_ostream;
12356 export noexcept_istream;
12357 export noexcept_iostream;
12362 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/base_stream/_body.hpp"
12367 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12372 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
12373 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12382 #if !defined(ELC_CORE)
12384 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
12393 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
12397 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12398 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
12407 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_exception"
12411 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12412 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12421 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_stream"
12425 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
12426 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
12435 #if defined(ELC_TEST)
12436 #error "this part cannot be tested."
12439 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12447 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12459 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12461 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
12472 #define BIT_POSSIBILITY 2
12476 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
12478 #if defined(_MSC_VER)
12479 #pragma warning(push,ELC_WARNING_LEVEL)
12480 #pragma warning(disable:4099)
12481 #pragma warning(disable:26812)
12482 #pragma warning(disable:4584)
12483 #pragma warning(disable:4250)
12484 #pragma warning(disable:26432)
12485 #pragma warning(disable:26435)
12486 #pragma warning(disable:26481)
12487 #pragma warning(disable:26446)
12488 #pragma warning(disable:26434)
12489 #pragma warning(disable:26429)
12490 #pragma warning(disable:26471)
12491 #pragma warning(disable:26474)
12492 #pragma warning(disable:26473)
12493 #pragma warning(disable:26456)
12494 #pragma warning(disable:26485)
12495 #pragma warning(disable:26490)
12496 #pragma warning(disable:26472)
12497 #pragma warning(disable:26482)
12498 #pragma warning(disable:26493)
12500 #if defined(_MSC_VER)
12501 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
12502 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
12503 #define push_msvc_warning() __pragma(warning(push))
12504 #define pop_msvc_warning() __pragma(warning(pop))
12505 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
12507 #define suppress_msvc_warning(...)
12508 #define disable_msvc_warning(...)
12509 #define push_msvc_warning()
12510 #define pop_msvc_warning()
12511 #define push_and_disable_msvc_warning(...)
12514 #if defined(ELC_VOID_NAME)
12519 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
12520 #define noexcept_as_auto MAGIC
12521 #define constexpr_as(...) MAGIC constexpr
12522 #define constexpr_as_auto MAGIC MAGIC constexpr
12524 #define using_method_from_base_t(name,...) \
12525 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
12526 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
12528 return base_t::name(forward<Args>(rest)...);\
12531 #define using_method_from_value(name,value_name,...) \
12532 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
12533 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
12535 return value_name.name(forward<Args>(rest)...);\
12538 #define floop while(__builtin_is_my_dick_still_there())
12539 #define enable_adl(name) void name()noexcept=delete
12541 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
12542 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
12544 #define declvalue(...) (::std::declval<__VA_ARGS__>())
12547 #define template_error(reason) static_assert(template_error_helper<T>,reason)
12549 #define template_warning(reason) template_warning_helper<T>(reason)
12552 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
12553 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
12555 #define is_common_attribute(name) public attribute<T,name<T>>
12556 #define is_special_attribute(name) public attribute<T,name>
12558 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
12559 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
12562 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
12564 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
12567 #define def_common_attribute_with_nothing(name) \
12568 template<typename T>\
12571 #define def_special_attribute_with_nothing(name) \
12574 #define common_attribute_t template<class>class
12575 #define special_attribute_t class
12585 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
12587 #define enabled_by_default class enable_state=void
12589 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
12591 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
12593 #define enable_flag class enable_state
12595 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
12596 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
12597 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
12598 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
12599 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
12602 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
12604 #define get_recursive_lambda_caller(name) \
12605 lambda_with_catch(&)(auto&&...Args){\
12606 return name(name,Args...);\
12611 #define lambda_with_catch(...) [__VA_ARGS__]
12613 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
12615 #define lambda_RLSRRS _my_jb_super_sb_name_
12623 #define elseif else if
12625 #define _big_than_ >
12627 #define _small_than_ <
12629 #if defined(_MSC_VER)
12636 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
12638 #define BREAK_NAMESPACE }
12641 #define template_name template
12643 #define type_name class
12645 #if defined(DEBUG) || defined(_DEBUG)
12646 #define not_in_debug 0
12648 #define not_in_debug 1
12652 #define ec(ch) U ## ch
12654 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
12655 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
12657 #define ELC_TEST_EVENTNAME(name)
12660 #define override_instance_struct \
12662 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
12663 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
12664 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
12665 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
12666 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
12668 #if defined(_WIN32)
12669 #define distinctive __declspec(dllexport)
12671 #define distinctive
12674 #if defined(_WIN32)
12675 #define force_inline __forceinline
12676 #elif defined(__GNUC__)
12677 #define force_inline __attribute__((always_inline)) inline
12679 #define force_inline inline
12682 #if defined(_WIN32)
12683 #define with_no_vtable __declspec(novtable)
12685 #define with_no_vtable
12688 #define in_consteval (::std::is_constant_evaluated())
12690 #define no_vtable_struct struct with_no_vtable
12691 #define no_vtable_class class with_no_vtable
12695 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
12699 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
12702 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12711 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/decl.hpp"
12728 namespace string_n{
12729 template<
typename char_T>
12735 template<constexpr_str_n::constexpr_str_t_literal_helper str_helper>
12736 inline constexpr string operator""_elc_string()noexcept;
12739 template<typename T>
12740 [[nodiscard]]inline ptr make_long_term_binary_node_from(T a)noexcept;
12742 template<typename T>
12743 constexpr
bool as_ptr_nothrow_helper()noexcept{
12760 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
12761 return noexcept(make_long_term_binary_node_from<char_t>(
declvalue(T)));
12762 elseif constexpr(::std::is_integral_v<remove_cvref<T>>){
12763 if constexpr(::std::is_signed_v<remove_cvref<T>>)
12764 return noexcept(make_long_term_binary_node_from<int_t>(
declvalue(T)));
12766 return noexcept(make_long_term_binary_node_from<uint_t>(
declvalue(T)));
12768 elseif constexpr(::std::is_floating_point_v<remove_cvref<T>>)
12769 return noexcept(make_long_term_binary_node_from<float_t>(
declvalue(T)));
12770 elseif constexpr(construct<string>.able<T>){
12771 return noexcept(make_long_term_binary_node_from<string>(
declvalue(T)));
12774 template<
typename T>
12775 decltype(
auto)
as_ptr(T&&a)
noexcept(as_ptr_nothrow_helper<T>()){
12784 return &
static_cast<const node_like&
>(a);
12786 return ptr(
static_cast<value&
>(a));
12793 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
12794 return make_long_term_binary_node_from<char_t>(a);
12795 elseif constexpr(::std::is_integral_v<remove_cvref<T>>){
12796 if constexpr(::std::is_signed_v<remove_cvref<T>>)
12797 return make_long_term_binary_node_from<int_t>(a);
12799 return make_long_term_binary_node_from<uint_t>(a);
12801 elseif constexpr(::std::is_floating_point_v<remove_cvref<T>>)
12802 return make_long_term_binary_node_from<float_t>(a);
12803 elseif constexpr(construct<string>.able<T>){
12804 return make_long_term_binary_node_from<string>(a);
12808 template<
typename T>
12821 template<
typename T>
12822 decltype(
auto)
as_value(T&& a)
noexcept(as_value_nothrow_helper<T>()){
12825 return static_cast<value&
>(a);
12827 return static_cast<const value&
>(a);
12838 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12840 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/node_like.hpp"
12849 [[nodiscard]]
inline ptr make_list()noexcept;
12850 template<typename T,typename...Args>
12851 [[nodiscard]]inline ptr make_list(T&&first,Args&&...rest);
12854 with_common_attribute<abstract_base,weak_ref_able,
replace_able,ref_able>{
12860 [[nodiscard]]virtual
value be_eval();
12861 [[nodiscard]]virtual
value be_call(
ptr);
12865 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept{
return 36;}
12866 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept{
return 36;}
12874 [[nodiscard]]
value operator[](
const value index);
12876 return operator[](
as_value(index));
12881 [[nodiscard]]virtual explicit operator
hash_t()const noexcept{
return hash((
void*)
this);}
12883 this->be_replace_as(null_ptr);
12890 [[nodiscard]]
virtual explicit operator logical_bool()const noexcept{
return true;}
12891 [[nodiscard]]
explicit operator bool()const noexcept{
return(
bool)this->
operator logical_bool();}
12893 template<
typename...Args>
12897 const auto this_eqlv = this->eq_level();
12898 const auto arg_eqlv = a->eq_level();
12900 return a->eq_with(
this);
12902 return this->eq_with(a);
12904 return this->eq_with(a)&&a->eq_with(
this);
12907 const auto this_equlv = this->equal_level();
12908 const auto arg_equlv = a->equal_level();
12910 return a->equal_with(
this);
12912 return this->equal_with(a);
12914 return this->equal_with(a)&&a->equal_with(
this);
12920 return a.equal(
this);
12923 friend void the_waiting_for_destroy(
node_like* a)
noexcept;
12928 [[nodiscard]]
inline constexpr node_like*the_get_null_ptr(
const node_like*)
noexcept;
12936 return a->operator
hash_t();
12940 a->waiting_for_destroy();
12953 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12954 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/ptr.hpp"
12963 typedef comn_ptr_t<node_like>ptr;
12964 typedef weak_ptr_t<node_like>weak_ptr;
12965 typedef comn_ptr_t<const node_like>const_ptr;
12966 typedef weak_ptr_t<const node_like>const_weak_ptr;
12970 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
12971 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/value.hpp"
12983 with_common_attribute<abstract_base,ref_able,never_in_array,replace_able>,
13011 [[nodiscard]]virtual
ptr get_value()=0;
13021 virtual
void be_set(
ptr a)noexcept override final{}
13034 virtual
void be_set(
ptr)noexcept override final{}
13047 virtual
void be_set(
ptr a)noexcept override final{
_m=a;}
13053 mutable comn_ptr_t<base_data_t>
_m;
13070 return operator=(
as_ptr(a));
13074 return _m->get_value();
13077 return _m->get_value();
13080 return operator ptr();
13085 [[nodiscard]]
explicit operator bool()
const{
return bool(
_m->get_value());}
13088 _m.do_replace(a._m);
13101 template<
typename T>
13103 return (*
operator&())[forward<T>(index)];
13105 template<
typename...Args>
requires(invoke<node_like>.able<Args...>)
13106 inline auto operator()(Args&&... rest)
noexcept(invoke<node_like>.nothrow<Args...>){
return(*
operator&())(forward<Args>(rest)...);}
13118 [[nodiscard]]
operator ptr::for_delete_t*(){
13119 return _m->get_value();
13124 return&value::null_data;
13138 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
13140 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/node_like_using_value_func_defs.hpp"
13150 [[nodiscard]]
inline value node_like::be_eval(){
13151 return value(
this);
13154 return value(
this);
13159 return arec(index);
13164 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/base_def/_body.hpp"
13168 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13169 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13178 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/base_runtime_exception.hpp"
13188 using runtime_exception::runtime_exception;
13193 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13194 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/core_runtime_internal_helper.hpp"
13203 namespace core_runtime_internal_helper_n{
13205 using base_runtime_exception::base_runtime_exception;
13219 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/runtime_exception/_body.hpp"
13223 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13224 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13233 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/base_constexpr.hpp"
13245 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept
override{
return magic_number::god;}
13246 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept
override{
return magic_number::god;}
13260 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13261 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/void.hpp"
13277 [[nodiscard]]
virtual constexpr size_t equal_level()const noexcept
override{
return max(type_info<size_t>);}
13278 [[nodiscard]]
virtual constexpr size_t eq_level()const noexcept
override{
return max(type_info<size_t>);}
13295 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13296 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/nil.hpp"
13310 [[nodiscard]]
virtual constexpr explicit operator hash_t()const noexcept
override{
return hash(
false);}
13311 [[nodiscard]]
virtual constexpr explicit operator logical_bool()const noexcept
override{
return false;}
13316 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13317 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/t.hpp"
13331 [[nodiscard]]
virtual constexpr explicit operator hash_t()const noexcept
override{
return hash(
true);}
13332 [[nodiscard]]
virtual constexpr explicit operator logical_bool()const noexcept
override{
return true;}
13340 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/special_values/_body.hpp"
13344 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13345 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13354 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/common_node.hpp"
13366 map_t<value,const_weak_ptr>
_m;
13371 if(a->get_type_info() != this->get_type_info())
13373 const this_t*p=down_cast<const this_t*>(a.get());
13384 #line 9 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13385 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/cons.hpp"
13421 if(a->get_type_info() != this->get_type_info())
13423 const this_t*p=down_cast<const this_t*>(a.get());
13424 return _car==p->
_car&&_cdr==p->
_cdr;
13434 ptr to=get<common_node>();
13446 template<
typename T,
typename...Args>
13454 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13455 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/expr.hpp"
13473 return as_ptr(_car)->be_call(_cdr);
13480 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13481 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/base_binary_function_node.hpp"
13513 if(a->get_type_info() != this->get_type_info())
13515 const this_t*p=down_cast<const this_t*>(a.get());
13517 return _func==p->
_func;
13526 virtual void clear()noexcept
override{_func=
nullptr;}
13531 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13532 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/binary_node_t.hpp"
13547 [[noreturn]] virtual
void throw_self_ptr()const=0;
13548 [[noreturn]] virtual
void throw_self_ptr()=0;
13549 template<typename T>
13551 template<typename T>
13553 template<typename T>
13554 friend[[nodiscard]]inline const T& const_use_by_ref_as(
const_ptr p)noexcept;
13556 template<typename T>
13568 static constexpr bool hash_nothrow_helper=
hash.able<T>?
13571 [[nodiscard]]
virtual explicit operator hash_t()const noexcept(hash_nothrow_helper)
override{
13572 if constexpr(
hash.able<T>)
13575 #if defined(_MSC_VER)
13576 [[gsl::suppress(f.6)]]
13578 return node_like::operator
hash_t();
13586 if(a->get_type_info() != this->get_type_info())
13588 const base_t*base_p=down_cast<const base_t*>(a.get());
13591 const this_t*p=down_cast<const this_t*>(base_p);
13595 return node_like::eq_with(a);
13606 return arec_as_value(
_m,index);
13613 re_construct.nothrow<T>;
13615 virtual void clear()noexcept(clear_nothrow_helper)
override{
13623 template<
typename T>
13626 if(p->get_type_info() == type_info<binary_node_base_t>){
13627 auto base_p = down_cast<const binary_node_base_t*>(p.get());
13628 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13630 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13632 base_p->throw_self_ptr();
13637 catch(
const void*){}
13642 template<
typename T>
13645 if(p->get_type_info() == type_info<binary_node_base_t>){
13646 auto base_p = down_cast<binary_node_base_t*>(p.get());
13647 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13648 return down_cast<target_node_t*>(base_p)->_m;
13649 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13651 base_p->throw_self_ptr();
13661 template<
typename T>
13663 return maybe_fail_use_by_ref_as<T>(p).get_ref();
13665 template<
typename T>
13668 if(p->get_type_info() == type_info<binary_node_base_t>){
13669 auto base_p = down_cast<const binary_node_base_t*>(p.get());
13670 if(base_p->get_additional_type_info() == type_info<target_node_t>)
13671 return down_cast<const target_node_t*>(base_p)->_m;
13672 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
13674 base_p->throw_self_ptr();
13676 catch(
const T*aret){
13679 catch(
const void*){}
13682 return const_default_value_of<T>;
13684 template<
typename T>
13686 return const_use_by_ref_as<T>(p);
13688 template<
typename T>
13690 return const_use_by_ref_as<T>(p);
13692 template<
typename T>
13694 return use_by_ref_as<T>(
as_ptr(a));
13696 template<
typename T>
13698 return get<binary_node_t<T>>(move(a));
13700 template<
typename T>
13702 template<
typename T>
13704 ptr& to = long_term_binary_node_storager<T>[a];
13705 if(!
bool(to) || const_use_by_ref_as<T>(to)!=a)
13706 to = make_binary_node_from<T>(move(a));
13712 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13713 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/code_list.hpp"
13723 return p->be_eval();
13757 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/nodes/_body.hpp"
13761 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13764 #if defined(ELC_TEST_ON)
13765 namespace core_part_test{
13766 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_test.hpp"
13774 inline void test(){
13777 inline void test_log_out(){
13779 inline void test_end(){
13784 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13788 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
13796 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
13807 #if defined(_MSC_VER)
13808 #pragma warning(pop)
13810 #undef suppress_msvc_warning
13811 #undef disable_msvc_warning
13812 #undef push_msvc_warning
13813 #undef pop_msvc_warning
13814 #undef push_and_disable_msvc_warning
13817 #undef BIT_POSSIBILITY
13819 #if defined(ELC_VOID_NAME)
13820 #define void the_void
13825 #undef noexcept_as_auto
13826 #undef constexpr_as
13827 #undef constexpr_as_auto
13829 #undef using_method_from_base_t
13830 #undef using_method_from_value
13835 #undef re_declvalue
13840 #undef template_error
13841 #undef template_warning
13843 #undef type_info_of
13844 #undef type_name_of
13846 #undef is_common_attribute
13847 #undef is_special_attribute
13849 #undef has_attribute
13850 #undef not_has_attribute
13852 #undef float_size_of
13855 #undef def_common_attribute_with_nothing
13856 #undef def_special_attribute_with_nothing
13858 #undef common_attribute_t
13859 #undef special_attribute_t
13862 #undef enabled_by_default
13863 #undef disabled_by_default
13864 #undef enable_if_not_ill_form
13867 #undef was_an_ill_form
13868 #undef was_an_ill_form_with_parameter
13869 #undef was_not_an_ill_form
13870 #undef was_not_an_ill_form_and_noexcept
13871 #undef was_not_an_ill_form_with_parameter
13873 #undef recursive_lambda
13874 #undef get_recursive_lambda_caller
13876 #undef lambda_with_catch
13877 #undef self_recursion
13878 #undef lambda_RLSRRS
13886 #undef _small_than_
13888 #if defined(_MSC_VER)
13894 #undef INTER_NAMESPACE
13895 #undef BREAK_NAMESPACE
13900 #undef template_name
13903 #undef not_in_debug
13908 #undef ELC_TEST_EVENTNAME
13910 #undef override_instance_struct
13914 #undef force_inline
13916 #undef with_no_vtable
13918 #undef in_consteval
13920 #undef no_vtable_struct
13921 #undef no_vtable_class
13925 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
13929 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13932 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_export.hpp"
13941 #define export using defs::core::
13960 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
13962 #if defined(ELC_STRING)
13963 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
13974 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
13982 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
13994 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
13996 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
14007 #define BIT_POSSIBILITY 2
14011 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14013 #if defined(_MSC_VER)
14014 #pragma warning(push,ELC_WARNING_LEVEL)
14015 #pragma warning(disable:4099)
14016 #pragma warning(disable:26812)
14017 #pragma warning(disable:4584)
14018 #pragma warning(disable:4250)
14019 #pragma warning(disable:26432)
14020 #pragma warning(disable:26435)
14021 #pragma warning(disable:26481)
14022 #pragma warning(disable:26446)
14023 #pragma warning(disable:26434)
14024 #pragma warning(disable:26429)
14025 #pragma warning(disable:26471)
14026 #pragma warning(disable:26474)
14027 #pragma warning(disable:26473)
14028 #pragma warning(disable:26456)
14029 #pragma warning(disable:26485)
14030 #pragma warning(disable:26490)
14031 #pragma warning(disable:26472)
14032 #pragma warning(disable:26482)
14033 #pragma warning(disable:26493)
14035 #if defined(_MSC_VER)
14036 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
14037 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
14038 #define push_msvc_warning() __pragma(warning(push))
14039 #define pop_msvc_warning() __pragma(warning(pop))
14040 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
14042 #define suppress_msvc_warning(...)
14043 #define disable_msvc_warning(...)
14044 #define push_msvc_warning()
14045 #define pop_msvc_warning()
14046 #define push_and_disable_msvc_warning(...)
14049 #if defined(ELC_VOID_NAME)
14054 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
14055 #define noexcept_as_auto MAGIC
14056 #define constexpr_as(...) MAGIC constexpr
14057 #define constexpr_as_auto MAGIC MAGIC constexpr
14059 #define using_method_from_base_t(name,...) \
14060 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
14061 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
14063 return base_t::name(forward<Args>(rest)...);\
14066 #define using_method_from_value(name,value_name,...) \
14067 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
14068 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
14070 return value_name.name(forward<Args>(rest)...);\
14073 #define floop while(__builtin_is_my_dick_still_there())
14074 #define enable_adl(name) void name()noexcept=delete
14076 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
14077 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
14079 #define declvalue(...) (::std::declval<__VA_ARGS__>())
14082 #define template_error(reason) static_assert(template_error_helper<T>,reason)
14084 #define template_warning(reason) template_warning_helper<T>(reason)
14087 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
14088 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
14090 #define is_common_attribute(name) public attribute<T,name<T>>
14091 #define is_special_attribute(name) public attribute<T,name>
14093 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
14094 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
14097 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
14099 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
14102 #define def_common_attribute_with_nothing(name) \
14103 template<typename T>\
14106 #define def_special_attribute_with_nothing(name) \
14109 #define common_attribute_t template<class>class
14110 #define special_attribute_t class
14120 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
14122 #define enabled_by_default class enable_state=void
14124 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
14126 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
14128 #define enable_flag class enable_state
14130 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
14131 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
14132 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
14133 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
14134 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
14137 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
14139 #define get_recursive_lambda_caller(name) \
14140 lambda_with_catch(&)(auto&&...Args){\
14141 return name(name,Args...);\
14146 #define lambda_with_catch(...) [__VA_ARGS__]
14148 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
14150 #define lambda_RLSRRS _my_jb_super_sb_name_
14158 #define elseif else if
14160 #define _big_than_ >
14162 #define _small_than_ <
14164 #if defined(_MSC_VER)
14171 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
14173 #define BREAK_NAMESPACE }
14176 #define template_name template
14178 #define type_name class
14180 #if defined(DEBUG) || defined(_DEBUG)
14181 #define not_in_debug 0
14183 #define not_in_debug 1
14187 #define ec(ch) U ## ch
14189 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
14190 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
14192 #define ELC_TEST_EVENTNAME(name)
14195 #define override_instance_struct \
14197 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
14198 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
14199 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
14200 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
14201 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
14203 #if defined(_WIN32)
14204 #define distinctive __declspec(dllexport)
14206 #define distinctive
14209 #if defined(_WIN32)
14210 #define force_inline __forceinline
14211 #elif defined(__GNUC__)
14212 #define force_inline __attribute__((always_inline)) inline
14214 #define force_inline inline
14217 #if defined(_WIN32)
14218 #define with_no_vtable __declspec(novtable)
14220 #define with_no_vtable
14223 #define in_consteval (::std::is_constant_evaluated())
14225 #define no_vtable_struct struct with_no_vtable
14226 #define no_vtable_class class with_no_vtable
14230 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14234 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
14236 namespace string_n{
14237 template<
class char_T>
14238 value
arec_as_value(string_t<char_T>&str,
const value index){
14239 size_t i=size_t(use_as<int_t>(index));
14241 i=size_t(use_as<uint_t>(index));
14242 struct arec_data_t final:instance_struct<arec_data_t>
14243 ,value::base_data_t{
14244 typename string_t<char_T>::arec_t
_m;
14245 arec_data_t(string_t<char_T>&str,
size_t index)
noexcept:
_m(&str,index){};
14246 arec_data_t(
const arec_data_t&ref)
noexcept:
_m(special_init,ref._m){}
14247 virtual ~arec_data_t()noexcept override final=default;
14249 virtual
void be_set(ptr a)noexcept override final{
move(
_m)=use_as<char_T>(a);}
14250 [[nodiscard]]
virtual ptr get_value()noexcept override final{
return core::make_binary_node_from<char_T>(
move(
_m));}
14251 [[nodiscard]]
virtual base_data_t*
copy()const noexcept override final{
return get<arec_data_t>(*
this);}
14252 [[nodiscard]]
virtual base_type_info_t get_type_info()const noexcept override final{
return type_info<arec_data_t>;}
14254 return get<arec_data_t>(str,i);
14258 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
14266 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
14277 #if defined(_MSC_VER)
14278 #pragma warning(pop)
14280 #undef suppress_msvc_warning
14281 #undef disable_msvc_warning
14282 #undef push_msvc_warning
14283 #undef pop_msvc_warning
14284 #undef push_and_disable_msvc_warning
14287 #undef BIT_POSSIBILITY
14289 #if defined(ELC_VOID_NAME)
14290 #define void the_void
14295 #undef noexcept_as_auto
14296 #undef constexpr_as
14297 #undef constexpr_as_auto
14299 #undef using_method_from_base_t
14300 #undef using_method_from_value
14305 #undef re_declvalue
14310 #undef template_error
14311 #undef template_warning
14313 #undef type_info_of
14314 #undef type_name_of
14316 #undef is_common_attribute
14317 #undef is_special_attribute
14319 #undef has_attribute
14320 #undef not_has_attribute
14322 #undef float_size_of
14325 #undef def_common_attribute_with_nothing
14326 #undef def_special_attribute_with_nothing
14328 #undef common_attribute_t
14329 #undef special_attribute_t
14332 #undef enabled_by_default
14333 #undef disabled_by_default
14334 #undef enable_if_not_ill_form
14337 #undef was_an_ill_form
14338 #undef was_an_ill_form_with_parameter
14339 #undef was_not_an_ill_form
14340 #undef was_not_an_ill_form_and_noexcept
14341 #undef was_not_an_ill_form_with_parameter
14343 #undef recursive_lambda
14344 #undef get_recursive_lambda_caller
14346 #undef lambda_with_catch
14347 #undef self_recursion
14348 #undef lambda_RLSRRS
14356 #undef _small_than_
14358 #if defined(_MSC_VER)
14364 #undef INTER_NAMESPACE
14365 #undef BREAK_NAMESPACE
14370 #undef template_name
14373 #undef not_in_debug
14378 #undef ELC_TEST_EVENTNAME
14380 #undef override_instance_struct
14384 #undef force_inline
14386 #undef with_no_vtable
14388 #undef in_consteval
14390 #undef no_vtable_struct
14391 #undef no_vtable_class
14395 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
14399 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
14404 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/core/_body.hpp"
14409 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
14414 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
14415 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
14424 #if !defined(ELC_LIB_LOADER)
14425 #define ELC_LIB_LOADER
14426 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
14435 #if !defined(ELC_STRING)
14437 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
14446 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
14450 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
14451 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
14460 #if defined(ELC_TEST)
14461 #error "this part cannot be tested."
14464 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14472 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14484 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14486 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
14497 #define BIT_POSSIBILITY 2
14501 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
14503 #if defined(_MSC_VER)
14504 #pragma warning(push,ELC_WARNING_LEVEL)
14505 #pragma warning(disable:4099)
14506 #pragma warning(disable:26812)
14507 #pragma warning(disable:4584)
14508 #pragma warning(disable:4250)
14509 #pragma warning(disable:26432)
14510 #pragma warning(disable:26435)
14511 #pragma warning(disable:26481)
14512 #pragma warning(disable:26446)
14513 #pragma warning(disable:26434)
14514 #pragma warning(disable:26429)
14515 #pragma warning(disable:26471)
14516 #pragma warning(disable:26474)
14517 #pragma warning(disable:26473)
14518 #pragma warning(disable:26456)
14519 #pragma warning(disable:26485)
14520 #pragma warning(disable:26490)
14521 #pragma warning(disable:26472)
14522 #pragma warning(disable:26482)
14523 #pragma warning(disable:26493)
14525 #if defined(_MSC_VER)
14526 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
14527 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
14528 #define push_msvc_warning() __pragma(warning(push))
14529 #define pop_msvc_warning() __pragma(warning(pop))
14530 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
14532 #define suppress_msvc_warning(...)
14533 #define disable_msvc_warning(...)
14534 #define push_msvc_warning()
14535 #define pop_msvc_warning()
14536 #define push_and_disable_msvc_warning(...)
14539 #if defined(ELC_VOID_NAME)
14544 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
14545 #define noexcept_as_auto MAGIC
14546 #define constexpr_as(...) MAGIC constexpr
14547 #define constexpr_as_auto MAGIC MAGIC constexpr
14549 #define using_method_from_base_t(name,...) \
14550 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
14551 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
14553 return base_t::name(forward<Args>(rest)...);\
14556 #define using_method_from_value(name,value_name,...) \
14557 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
14558 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
14560 return value_name.name(forward<Args>(rest)...);\
14563 #define floop while(__builtin_is_my_dick_still_there())
14564 #define enable_adl(name) void name()noexcept=delete
14566 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
14567 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
14569 #define declvalue(...) (::std::declval<__VA_ARGS__>())
14572 #define template_error(reason) static_assert(template_error_helper<T>,reason)
14574 #define template_warning(reason) template_warning_helper<T>(reason)
14577 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
14578 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
14580 #define is_common_attribute(name) public attribute<T,name<T>>
14581 #define is_special_attribute(name) public attribute<T,name>
14583 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
14584 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
14587 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
14589 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
14592 #define def_common_attribute_with_nothing(name) \
14593 template<typename T>\
14596 #define def_special_attribute_with_nothing(name) \
14599 #define common_attribute_t template<class>class
14600 #define special_attribute_t class
14610 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
14612 #define enabled_by_default class enable_state=void
14614 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
14616 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
14618 #define enable_flag class enable_state
14620 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
14621 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
14622 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
14623 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
14624 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
14627 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
14629 #define get_recursive_lambda_caller(name) \
14630 lambda_with_catch(&)(auto&&...Args){\
14631 return name(name,Args...);\
14636 #define lambda_with_catch(...) [__VA_ARGS__]
14638 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
14640 #define lambda_RLSRRS _my_jb_super_sb_name_
14648 #define elseif else if
14650 #define _big_than_ >
14652 #define _small_than_ <
14654 #if defined(_MSC_VER)
14661 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
14663 #define BREAK_NAMESPACE }
14666 #define template_name template
14668 #define type_name class
14670 #if defined(DEBUG) || defined(_DEBUG)
14671 #define not_in_debug 0
14673 #define not_in_debug 1
14677 #define ec(ch) U ## ch
14679 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
14680 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
14682 #define ELC_TEST_EVENTNAME(name)
14685 #define override_instance_struct \
14687 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
14688 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
14689 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
14690 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
14691 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
14693 #if defined(_WIN32)
14694 #define distinctive __declspec(dllexport)
14696 #define distinctive
14699 #if defined(_WIN32)
14700 #define force_inline __forceinline
14701 #elif defined(__GNUC__)
14702 #define force_inline __attribute__((always_inline)) inline
14704 #define force_inline inline
14707 #if defined(_WIN32)
14708 #define with_no_vtable __declspec(novtable)
14710 #define with_no_vtable
14713 #define in_consteval (::std::is_constant_evaluated())
14715 #define no_vtable_struct struct with_no_vtable
14716 #define no_vtable_class class with_no_vtable
14720 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
14724 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
14726 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/defs.hpp"
14735 namespace string_n{
14736 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
14745 inline namespace string_data_n{
14746 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_decl.hpp"
14755 template<
typename char_T>
14758 template<
typename char_T>
14760 template<
typename char_T>
14763 template<
typename char_T>
14766 template<
typename char_T>
14769 template<
typename char_T>
14771 template<
typename char_T>
14774 template<
typename char_T>
14777 template<
typename char_T>
14779 template<
typename char_T>
14785 template<
typename char_T>
14790 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
14792 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/base_string_data_t.hpp"
14801 template<
typename char_T>
14803 with_common_attribute<abstract_base,never_in_array,replace_able,ref_able>,
build_by_get_only{
14810 static constexpr bool copy_assign_nothrow=copy_assign.
nothrow<char_T>;
14811 static constexpr bool copy_construct_nothrow=copy_construct.
nothrow<char_T>;
14812 static constexpr bool move_construct_nothrow=move_construct.
nothrow<char_T>;
14813 static constexpr bool construct_nothrow=construct<char_T>.nothrow<>;
14814 static constexpr bool destruct_nothrow=destruct.
nothrow<char_T>;
14815 static constexpr bool clear_nothrow=destruct_nothrow;
14816 static constexpr bool ptr_reset_nothrow=destruct_nothrow;
14817 static constexpr bool hash_nothrow=
hash.nothrow<char_T>;
14818 static constexpr bool get_data_nothrow=copy_construct_nothrow&&destruct_nothrow;
14819 static constexpr bool apply_data_nothrow=construct_nothrow&©_assign_nothrow;
14836 [[nodiscard]]
bool is_unique()noexcept{
return get_ref_num(
this)==1; }
14837 virtual void be_replace_as(ptr_t a)
noexcept(clear_nothrow)=0;
14841 [[nodiscard]]virtual char_T* get_c_str(
ptr_t&)noexcept(get_data_nothrow);
14842 [[nodiscard]]virtual const char_T* get_const_c_str(
ptr_t&p)noexcept(get_data_nothrow){
return get_c_str(p);}
14843 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&p)
noexcept(get_data_nothrow){
return get_c_str(p);}
14844 [[nodiscard]]
virtual char_T* get_unique_c_str(ptr_t&)
noexcept(get_data_nothrow);
14846 [[nodiscard]]virtual
ptr_t get_substr_data(
size_t begin,
size_t size)noexcept;
14847 [[nodiscard]]virtual
ptr_t apply_str_to_begin(
string_view_t str)noexcept(copy_construct_nothrow&&apply_data_nothrow);
14848 [[nodiscard]]virtual
ptr_t apply_str_to_begin(
ptr_t str)noexcept(apply_data_nothrow);
14849 [[nodiscard]]virtual
ptr_t apply_str_to_end(
string_view_t str)noexcept(copy_construct_nothrow&&apply_data_nothrow);
14850 [[nodiscard]]virtual
ptr_t apply_str_to_end(
ptr_t str)noexcept(apply_data_nothrow);
14852 [[nodiscard]]virtual
ptr_t do_insert(
size_t pos,
string_view_t str)noexcept(copy_construct_nothrow);
14853 [[nodiscard]]virtual
ptr_t do_insert(
size_t pos,
ptr_t str)noexcept;
14854 [[nodiscard]]virtual
ptr_t do_erase(
size_t pos,
size_t size)noexcept;
14856 [[nodiscard]]virtual
ptr_t do_pop_back(
size_t size,
ptr_t& self)noexcept(construct_nothrow&©_assign_nothrow){
14857 const auto pos = this->get_size()-size;
14858 const auto before = get_substr_data(0,pos);
14859 const auto after = get_substr_data(pos,size);
14864 const auto pos = size;
14865 const auto before = get_substr_data(0,pos);
14866 const auto after = get_substr_data(pos,this->get_size()-size);
14899 if(this->has_hash_cache()&&with->has_hash_cache())
14900 if(this->get_hash_cache()!=with->get_hash_cache())
14909 if(same_type(with)&&same_struct(with))
14910 aret=same_struct_equal(with);
14913 aret=default_equal_method(with);
14917 equivalent_optimization(
this,with);
14923 const size_t self_size=get_size();
14924 return equal_with(with,0,self_size);
14932 auto a=this->get_the_largest_complete_data_block_begin_form(index);
14933 auto b=with->get_the_largest_complete_data_block_begin_form(index);
14935 const size_t step=
min({a.size(),b.size(),size});
14936 if(a.begin()!=b.begin())
14937 if(!
equal(a.begin(),b.begin(),step))
14942 a=this->get_the_largest_complete_data_block_begin_form(index);
14944 a={a.begin()+step,note::size(a.size()-step)};
14946 b=with->get_the_largest_complete_data_block_begin_form(index);
14948 b={b.begin()+step,note::size(b.size()-step)};
14949 if(!a.size()&&!b.size())
14950 return a.size()==b.size();
14955 size_t size=with.size();
14957 auto a=this->get_the_largest_complete_data_block_begin_form(index);
14958 if(a.begin()==with.begin() && a.size()==with.size())
14961 auto b=with.begin()+index;
14962 const size_t step=
min({a.size(),with.size()-index,size});
14963 if(!
equal(a.begin(),b,step))
14968 a=this->get_the_largest_complete_data_block_begin_form(index);
14970 a={a.begin()+step,note::size(a.size()-step)};
14971 if(!a.size()||!size)
14972 return a.size()==size;
14976 size_t size=get_size();
14978 auto a=this->get_the_largest_complete_data_block_begin_form(index);
14979 if(a.begin()==with && with[a.size()]==char_T{})
14985 size_t step=
min({a.size(),size});
14991 a=this->get_the_largest_complete_data_block_begin_form(index);
14993 a={a.begin()+step,note::size(a.size()-step)};
15004 return strong_ordering::equivalent;
15012 if(same_type(with)&&same_struct(with))
15013 aret=same_struct_compare(with);
15016 aret=default_compare_method(with);
15020 equivalent_optimization(
this,with);
15026 const size_t self_size=get_size();
15027 return compare_with(with,0,self_size);
15033 return strong_ordering::equivalent;
15035 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15036 auto b=with->get_the_largest_complete_data_block_begin_form(index);
15038 const size_t step=
min({a.size(),b.size(),size});
15039 if(a.begin()!=b.begin())
15040 if(
auto tmp=
compare(a.begin(),b.begin(),step); tmp!=0)
15045 a=this->get_the_largest_complete_data_block_begin_form(index);
15047 a={a.begin()+step,note::size(a.size()-step)};
15049 b=with->get_the_largest_complete_data_block_begin_form(index);
15051 b={b.begin()+step,note::size(b.size()-step)};
15052 if(!a.size()||!b.size())
15053 return a.size()<=>b.size();
15055 return strong_ordering::equivalent;
15058 size_t size=with.size();
15060 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15061 if(a.begin()==with.begin() && a.size()==with.size())
15062 return strong_ordering::equivalent;
15064 auto b=with.begin()+index;
15065 size_t step=
min({a.size(),with.size()-index,size});
15066 if(
auto tmp=
compare(a.begin(),b,step); tmp!=0)
15071 a=this->get_the_largest_complete_data_block_begin_form(index);
15073 a={a.begin()+step,note::size(a.size()-step)};
15074 if(!a.size()||!size)
15075 return a.size()<=>size;
15079 size_t size=get_size();
15081 auto a=this->get_the_largest_complete_data_block_begin_form(index);
15082 if(a.begin()==with && with[a.size()]==char_T{})
15083 return strong_ordering::equivalent;
15087 return strong_ordering::greater;
15088 size_t step=
min({a.size(),size});
15094 a=this->get_the_largest_complete_data_block_begin_form(index);
15096 a={a.begin()+step,note::size(a.size()-step)};
15098 return *(with+index)==char_T{}? strong_ordering::equivalent:
15099 strong_ordering::less;
15101 return strong_ordering::greater;
15107 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)=0;
15108 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)=0;
15111 bool _has_hash_cache=
false;
15118 if(has_hash_cache())
15119 return get_hash_cache();
15121 const auto tmp=this->get_hash_detail(p);
15122 return p->set_hash_cache(tmp);
15127 const auto size=get_size();
15128 const auto data=get_data(p);
15129 return hash(data,size);
15133 if(pos==0&&size==get_size())
15134 return hash.merge_array_hash_results(before,before_size,get_hash(p),size);
15135 return this->get_others_hash_with_calculated_before_detail(before,before_size,p,pos,size);
15139 return hash.with_calculated_before(before,before_size,get_data(p)+pos,size);
15143 reset_hash_cache();
15148 return get_base_memory_cost()/get_ref_num(
this);
15150 [[nodiscard]]
float_size_t get_memory_cost_after_gc()noexcept;
15151 [[nodiscard]]
float_size_t get_gc_profit()noexcept{
return get_memory_cost()-get_memory_cost_after_gc();}
15168 a->be_replace_as(b);
15174 if(a->get_memory_cost() >= b->get_memory_cost())
15180 template<
typename char_T>
15187 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15189 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/null_string_data_t.hpp"
15198 template<
typename char_T>
15205 using base_t::copy_assign_nothrow;
15206 using base_t::copy_construct_nothrow;
15207 using base_t::move_construct_nothrow;
15208 using base_t::construct_nothrow;
15209 using base_t::destruct_nothrow;
15210 using base_t::clear_nothrow;
15211 using base_t::ptr_reset_nothrow;
15212 using base_t::hash_nothrow;
15213 using base_t::get_data_nothrow;
15214 using base_t::apply_data_nothrow;
15215 using base_t::set_hash_cache;
15221 static char_T data[1]{};
15224 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return 0; }
15225 [[nodiscard]]
virtual ptr_t get_substr_data([[maybe_unused]]
size_t begin,[[maybe_unused]]
size_t size)
noexcept override final{
return this; }
15231 [[nodiscard]]
virtual ptr_t do_insert([[maybe_unused]]
size_t pos,[[maybe_unused]]
string_view_t str)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
return get<comn_string_data_t<char_T>>(str); }
15232 [[nodiscard]]
virtual ptr_t do_insert([[maybe_unused]]
size_t pos,[[maybe_unused]]
ptr_t str)
noexcept override final{
return str; }
15233 [[nodiscard]]
virtual ptr_t do_erase([[maybe_unused]]
size_t pos,[[maybe_unused]]
size_t size)
noexcept override final{
return this; }
15235 virtual void copy_part_data_to([[maybe_unused]]char_T* to,[[maybe_unused]]
size_t pos,[[maybe_unused]]
size_t size)
noexcept override final{
return; }
15237 [[nodiscard]]
virtual char_T
arec([[maybe_unused]]
size_t index)
noexcept override final{
return char_T{}; }
15238 virtual void arec_set([[maybe_unused]]
size_t index,[[maybe_unused]]char_T a,[[maybe_unused]]
ptr_t& p)
noexcept override final{
nothing; }
15239 [[nodiscard]]
virtual ptr_t do_pop_back([[maybe_unused]]
size_t size,[[maybe_unused]]
ptr_t& self)
noexcept override final{
return this; }
15240 [[nodiscard]]
virtual ptr_t do_pop_front([[maybe_unused]]
size_t size,[[maybe_unused]]
ptr_t& self)
noexcept override final{
return this; }
15251 template<
typename char_T>
15253 template<
typename char_T>
15258 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15259 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/constexpr_string_data_t.hpp"
15268 template<
typename char_T>
15275 using base_t::copy_assign_nothrow;
15276 using base_t::copy_construct_nothrow;
15277 using base_t::move_construct_nothrow;
15278 using base_t::construct_nothrow;
15279 using base_t::destruct_nothrow;
15280 using base_t::clear_nothrow;
15281 using base_t::ptr_reset_nothrow;
15282 using base_t::hash_nothrow;
15283 using base_t::get_data_nothrow;
15284 using base_t::apply_data_nothrow;
15285 using base_t::set_hash_cache;
15292 bool match_pattern_by_get = 0;
15295 if(match_pattern_by_get){
15298 _p_match_pattern =
nullptr;
15299 _p_reverse_match_pattern =
nullptr;
15306 set_hash_cache(
hash(str));
15309 match_pattern_by_get=0;
15315 be_replace_as(null_ptr);
15318 clear_match_pattern();
15324 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&)
noexcept(get_data_nothrow)
override final{
return _m;}
15329 return base_t::get_const_c_str(p);
15331 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _size; }
15333 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ copy_assign[size](note::from(
_m+pos),note::to(to)); }
15335 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _m[index]; }
15338 virtual void arec_set(
size_t index,char_T a,
ptr_t&p)
noexcept override final{base_t::arec_set(index,a,p);}
15345 auto wp=down_cast<this_t*>(with.get());
15348 return equal(
_m,wp->_m,_size);
15351 auto wp=down_cast<this_t*>(with.get());
15353 return strong_ordering::equivalent;
15362 if(!_p_match_pattern){
15363 _p_match_pattern=get<range_n::match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15364 match_pattern_by_get = 1;
15366 return *_p_match_pattern;
15369 if(!_p_reverse_match_pattern){
15370 _p_reverse_match_pattern=get<range_n::reverse_match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15371 match_pattern_by_get = 1;
15373 return *_p_reverse_match_pattern;
15379 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15381 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/comn_string_data_t.hpp"
15390 template<
typename char_T>
15396 using base_t::self_changed;
15398 using base_t::copy_assign_nothrow;
15399 using base_t::copy_construct_nothrow;
15400 using base_t::move_construct_nothrow;
15401 using base_t::construct_nothrow;
15402 using base_t::destruct_nothrow;
15403 using base_t::clear_nothrow;
15404 using base_t::ptr_reset_nothrow;
15405 using base_t::hash_nothrow;
15406 using base_t::get_data_nothrow;
15407 using base_t::apply_data_nothrow;
15408 using base_t::set_hash_cache;
15414 unget(_p_match_pattern);
15415 unget(_p_reverse_match_pattern);
15416 base_t::self_changed();
15419 clear_match_pattern();
15420 base_t::self_changed();
15424 copy_assign[str.size()](note::from(str.begin()),note::to((char_T*)
_m));
15428 auto size=this->get_size();
15429 str->copy_part_data_to((char_T*)
_m,0,size);
15433 str->copy_part_data_to((char_T*)
_m,pos,size);
15444 clear_match_pattern();
15449 base_t::be_replace_as(a);
15453 if(this->is_unique())
15454 return (char_T*)
_m;
15456 return base_t::get_unique_c_str(p);
15458 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _m.size()-1; }
15460 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ copy_assign[size](note::from((
const char_T*)
_m+pos),note::to(to)); }
15462 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _m[index]; }
15463 virtual void arec_set(
size_t index,char_T a,
ptr_t&p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15464 if(this->is_unique()){
15465 copy_assign(
_m[index],a);
15469 base_t::arec_set(index,a,p);
15477 auto wp=down_cast<this_t*>(with.get());
15481 auto wp=down_cast<this_t*>(with.get());
15490 if(!_p_match_pattern){
15491 _p_match_pattern=get<range_n::match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15493 return *_p_match_pattern;
15496 if(!_p_reverse_match_pattern){
15497 _p_reverse_match_pattern=get<range_n::reverse_match_pattern<const char_T>>(
array_like_view_t{this->get_data(self),this->get_size()});
15499 return *_p_reverse_match_pattern;
15502 template<
typename char_T>
15504 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15505 if(positive_gc_profit())
15506 a.do_replace(comn_data);
15511 template<
typename char_T>
15513 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15517 template<
typename char_T>
15519 copy_assign(this->get_unique_c_str(p)[index],a);
15521 template<
typename char_T>
15523 const auto size_of_base_array=this->get_size()*
sizeof(char_T);
15525 return size/get_ref_num(
this);
15527 template<
typename char_T>
15529 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15533 template<
typename char_T>
15535 auto comn_data=get<comn_string_data_t<char_T>>(
this);
15542 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15544 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/substr_string_data_t.hpp"
15553 template<
typename char_T>
15559 using base_t::self_changed;
15561 using base_t::copy_assign_nothrow;
15562 using base_t::copy_construct_nothrow;
15563 using base_t::move_construct_nothrow;
15564 using base_t::construct_nothrow;
15565 using base_t::destruct_nothrow;
15566 using base_t::clear_nothrow;
15567 using base_t::ptr_reset_nothrow;
15568 using base_t::hash_nothrow;
15569 using base_t::get_data_nothrow;
15570 using base_t::apply_data_nothrow;
15571 using base_t::set_hash_cache;
15579 be_replace_as(null_ptr);
15583 null_equivalent_check();
15588 base_t::be_replace_as(a);
15590 [[nodiscard]]
virtual ptr_t get_substr_data(
size_t begin,
size_t size)
noexcept override final{
return get<substr_string_data_t<char_T>>(_to,begin+_sub_begin,size); }
15592 if(_sub_begin+_sub_size==_to->get_size())
15593 return _to->get_const_c_str(_to)+_sub_begin;
15595 return base_t::get_const_c_str(p);
15597 [[nodiscard]]
virtual const char_T*
get_data(
ptr_t&)
noexcept(get_data_nothrow)
override final{
return _to->get_data(_to)+_sub_begin; }
15598 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _sub_size; }
15600 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{ _to->copy_part_data_to(to,pos+_sub_begin,size); }
15602 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
return _to->arec(index+_sub_begin); }
15603 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15604 if(this->is_unique()){
15605 _to->arec_set(index+_sub_begin,a,_to);
15609 base_t::arec_set(index,a,p);
15612 if(this->is_unique() && _sub_begin==0){
15613 _to=_to->apply_str_to_begin(str);
15614 _sub_size+=str.size();
15619 return base_t::apply_str_to_begin(str);
15622 if(this->is_unique() && _sub_begin==0){
15623 _to=_to->apply_str_to_begin(str);
15624 _sub_size+=str->get_size();
15629 return base_t::apply_str_to_begin(str);
15632 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15633 _to=_to->apply_str_to_end(str);
15634 _sub_size+=str.size();
15639 return base_t::apply_str_to_end(str);
15642 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15643 _to=_to->apply_str_to_end(str);
15644 _sub_size+=str->get_size();
15649 return base_t::apply_str_to_end(str);
15652 if(this->is_unique() && _sub_begin==0){
15653 auto aret=_to->do_pop_front(size,_to);
15655 null_equivalent_check();
15660 return base_t::do_pop_front(size,self);
15662 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
15663 if(this->is_unique() && _sub_begin+_sub_size==_to->get_size()){
15664 auto aret=_to->do_pop_back(size,_to);
15666 null_equivalent_check();
15671 return base_t::do_pop_back(size,self);
15676 result=_to->get_others_hash_with_calculated_before(result,0,_to,_sub_begin,_sub_size);
15680 return _to->get_others_hash_with_calculated_before(before,before_size,_to,pos+_sub_begin,size);
15684 auto wp = down_cast<this_t*>(with.get());
15685 return _sub_begin == wp->_sub_begin;
15688 auto result = _to->get_the_largest_complete_data_block_begin_form(_sub_begin+begin);
15689 auto size =
min(result.size(),_sub_size-begin);
15690 return {result.begin(), note::size(size)};
15693 auto wp=down_cast<this_t*>(with.get());
15694 return _to->equal_with(wp->_to,_sub_begin,_sub_size);
15697 auto wp=down_cast<this_t*>(with.get());
15698 return _to->compare_with(wp->_to,_sub_begin,_sub_size);
15704 template<
typename char_T>
15706 if(begin==0&&size==get_size())
15709 return get<substr_string_data_t<char_T>>(
this,begin,size);
15714 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15716 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/head_apply_string_data_t.hpp"
15725 template<
typename char_T>
15731 using base_t::self_changed;
15733 using base_t::copy_assign_nothrow;
15734 using base_t::copy_construct_nothrow;
15735 using base_t::move_construct_nothrow;
15736 using base_t::construct_nothrow;
15737 using base_t::destruct_nothrow;
15738 using base_t::clear_nothrow;
15739 using base_t::ptr_reset_nothrow;
15740 using base_t::hash_nothrow;
15741 using base_t::get_data_nothrow;
15742 using base_t::apply_data_nothrow;
15743 using base_t::set_hash_cache;
15751 _to_size(str->get_size()),
15752 _used_size(head.size()),
15755 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
15756 copy_assign[_used_size](note::from<const char_T*>(head.begin()),note::to<char_T*>(
_m.end()-_used_size));
15760 if(begin>=_used_size)
15761 return _to->get_substr_data(begin-_used_size,size);
15763 return base_t::get_substr_data(begin,size);
15767 return _to->get_c_str(_to);
15769 return base_t::get_c_str(p);
15772 if(type_info<this_t> ==
typeid(*a)){
15773 const auto p = down_cast<this_t*>(a.get());
15774 if(_used_size==p->_used_size && _to!=p->_to)
15775 base_t::equivalent_optimization(_to, p->_to);
15779 base_t::be_replace_as(a);
15781 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _used_size+_to_size; }
15784 return this->apply_str_to_begin(str);
15786 return this->apply_str_to_end(str);
15787 elseif(this->is_unique()){
15788 if(pos<_used_size){
15789 if(
_m.size()-_used_size<str.size()){
15790 const auto size_now=this->get_size()+str.size();
15791 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
15792 _m.insert_with_forward_resize(pos,str.size(),str.begin(),size_new);
15795 char_T* orogin_head_begin=
_m.end()-_used_size;
15796 char_T* head_begin=orogin_head_begin-str.size();
15797 copy_assign[pos](note::from<const char_T*>(orogin_head_begin),note::to<char_T*>(head_begin));
15798 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(head_begin+pos));
15800 _used_size+=str.size();
15802 _to=_to->do_insert(pos-_used_size,str);
15803 _to_size=_to->get_size();
15809 return base_t::do_insert(pos,str);
15812 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
15813 if(pos<_used_size){
15814 const char_T* head_begin=
_m.end()-_used_size;
15815 const char_T* head_end=
_m.end();
15816 const char_T* copy_begin=pos+head_begin;
15817 size_t size_of_copy_from_head=
min(
size_t(head_end-copy_begin),size);
15819 copy_assign[size_of_copy_from_head](note::from(copy_begin),note::to(to));
15820 if(size!=size_of_copy_from_head){
15821 const size_t size_left=size-size_of_copy_from_head;
15822 char_T* next_copy_begin_pos=to+size_of_copy_from_head;
15823 _to->copy_part_data_to(next_copy_begin_pos,0,size_left);
15827 _to->copy_part_data_to(to,pos-_used_size,size);
15830 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
15831 if(index<_used_size){
15832 const char_T* head_begin=
_m.end()-_used_size;
15833 return head_begin[index];
15836 return _to->arec(index-_used_size);
15838 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
15839 if(this->is_unique()){
15840 if(index<_used_size){
15841 char_T* head_begin=
_m.end()-_used_size;
15842 copy_assign(head_begin[index],a);
15845 _to->arec_set(index-_used_size,a,_to);
15849 base_t::arec_set(index,a,p);
15852 if(this->is_unique()){
15853 if(
_m.size()-_used_size<str.size()){
15854 const auto size_now=this->get_size()+str.size();
15855 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
15856 _m.insert_with_forward_resize(0,str.size(),str.begin(),size_new);
15859 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(
_m.end()-_used_size-str.size()));
15860 _used_size+=str.size();
15865 return base_t::apply_str_to_begin(str);
15869 return base_t::apply_str_to_begin(str);
15872 _m.forward_resize(_used_size);
15875 if(this->is_unique()){
15876 _to=_to->apply_str_to_end(str);
15877 _to_size+=str.size();
15882 return base_t::apply_str_to_end(str);
15885 if(this->is_unique()){
15886 _to=_to->apply_str_to_end(str);
15887 _to_size+=str->get_size();
15892 return base_t::apply_str_to_end(str);
15895 if(this->is_unique() && _used_size>=size){
15898 return get<comn_string_data_t<char_T>>(
string_view_t{(char_T*)
_m.end()-_used_size-size,size});
15901 return base_t::do_pop_front(size,self);
15903 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
15904 if(this->is_unique()){
15905 auto aret=_to->do_pop_back(size,_to);
15911 return base_t::do_pop_back(size,self);
15918 const char_T* head_begin=
_m.end()-_used_size;
15919 result=
hash(head_begin,_used_size);
15921 result=
hash.merge_array_hash_results(result,_used_size,_to->get_hash(_to),_to_size);
15924 result=_to->get_hash(_to);
15928 if(pos<_used_size){
15929 const char_T* head_begin=
_m.end()-_used_size;
15930 const char_T* head_end=
_m.end();
15931 const char_T* calculate_begin=pos+head_begin;
15932 const size_t size_of_calculate_from_head=
min(
size_t(head_end-calculate_begin),size);
15934 before=
hash.with_calculated_before(before,before_size,calculate_begin,size_of_calculate_from_head);
15935 if(size!=size_of_calculate_from_head){
15936 const size_t size_left=size-size_of_calculate_from_head;
15937 before_size+=size_of_calculate_from_head;
15938 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,0,size_left);
15942 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos-_used_size,size);
15947 auto wp=down_cast<this_t*>(with.get());
15948 return _used_size==wp->_used_size;
15951 if(begin >= _used_size)
15952 return _to->get_the_largest_complete_data_block_begin_form(begin-_used_size);
15954 const char_T* head_begin =
_m.end() - _used_size;
15955 const char_T* head_end =
_m.end();
15956 const char_T* ret_begin = begin+head_begin;
15957 return {ret_begin, head_end};
15961 auto wp=down_cast<this_t*>(with.get());
15962 const char_T* head_begin =
_m.end() - _used_size;
15963 const char_T* wp_head_begin = wp->_m.end() - _used_size;
15964 if(!
equal(head_begin,wp_head_begin,_used_size))
15966 return _to->equal_with(wp->_to);
15969 auto wp=down_cast<this_t*>(with.get());
15970 const char_T* head_begin =
_m.end() - _used_size;
15971 const char_T* wp_head_begin = wp->_m.end() - _used_size;
15972 if(
auto tmp=
compare(head_begin,wp_head_begin,_used_size); tmp!=0)
15974 return _to->compare_with(wp->_to);
15977 return _to->get_memory_cost()+
float_size_of(*
this)+
_m.size_in_byte();
15980 template<
typename char_T>
15990 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
15991 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/end_apply_string_data_t.hpp"
16000 template<
typename char_T>
16006 using base_t::self_changed;
16008 using base_t::copy_assign_nothrow;
16009 using base_t::copy_construct_nothrow;
16010 using base_t::move_construct_nothrow;
16011 using base_t::construct_nothrow;
16012 using base_t::destruct_nothrow;
16013 using base_t::clear_nothrow;
16014 using base_t::ptr_reset_nothrow;
16015 using base_t::hash_nothrow;
16016 using base_t::get_data_nothrow;
16017 using base_t::apply_data_nothrow;
16018 using base_t::set_hash_cache;
16026 _to_size(str->get_size()),
16027 _used_size(
end.size()),
16030 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16031 copy_assign[_used_size](note::from(
end.begin()),note::to((char_T*)
_m));
16034 _to_size(str->get_size()),
16038 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16039 copy_assign[_used_size](ch,note::to((char_T*)
_m));
16042 _to_size(str->get_size()),
16046 _m.resize(get_next_gold_size_to_resize_for_array(_to_size+_used_size));
16050 if(begin+size<=_to_size)
16051 return _to->get_substr_data(begin,size);
16053 return base_t::get_substr_data(begin,size);
16057 return _to->get_c_str(_to);
16059 return base_t::get_c_str(p);
16062 if(type_info<this_t> ==
typeid(*a)){
16063 const auto p = down_cast<this_t*>(a.get());
16064 if(_used_size==p->_used_size && _to!=p->_to)
16065 base_t::equivalent_optimization(_to, p->_to);
16069 base_t::be_replace_as(a);
16071 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _used_size+_to_size; }
16074 return this->apply_str_to_begin(str);
16076 return this->apply_str_to_end(str);
16077 elseif(this->is_unique()){
16079 _to=_to->do_insert(pos-_used_size,str);
16080 _to_size=_to->get_size();
16084 if(
_m.size()-_used_size<str.size()){
16085 const auto size_now=this->get_size()+str.size();
16086 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
16087 _m.insert_with_resize(pos,str.size(),str.begin(),size_new);
16090 copy_assign[_used_size-pos](note::from<const char_T*>(&
_m[pos]),note::to((char_T*)&
_m[pos+str.size()]));
16091 copy_assign[str.size()](note::from<const char_T*>(str.begin()),note::to<char_T*>(&
_m[pos]));
16093 _used_size+=str.size();
16099 return base_t::do_insert(pos,str);
16102 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16103 if(pos+size<=_to_size)
16104 _to->copy_part_data_to(to,pos,size);
16107 _to->copy_part_data_to(to,pos,_to_size-pos);
16108 auto copied_size=_to_size-pos;
16115 copy_assign[size](note::from((
const char_T*)
_m+pos),note::to(to));
16119 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16121 return _to->arec(index);
16123 return _m[index-_to_size];
16125 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16126 if(this->is_unique()){
16128 _to->arec_set(index,a,_to);
16130 copy_assign(
_m[index - _to_size],a);
16134 base_t::arec_set(index,a,p);
16138 if(this->is_unique()){
16139 if(
_m.size()-_used_size < str.size()){
16140 const auto size_now=this->get_size()+str.size();
16141 const auto size_new=get_next_gold_size_to_resize_for_array(size_now);
16142 _m.insert_with_resize(_used_size,str.size(),str.begin(),size_new);
16145 copy_assign[str.size()](note::from(str.begin()),note::to((char_T*)
_m+_used_size));
16146 _used_size+=str.size();
16151 return base_t::apply_str_to_end(str);
16155 return base_t::apply_str_to_end(str);
16158 if(this->is_unique()){
16159 _to=_to->apply_str_to_begin(str);
16160 _to_size+=str.size();
16165 return base_t::apply_str_to_begin(str);
16168 if(this->is_unique()){
16169 _to=_to->apply_str_to_begin(str);
16170 _to_size+=str->get_size();
16175 return base_t::apply_str_to_begin(str);
16178 if(this->is_unique()){
16179 auto aret=_to->do_pop_front(size,_to);
16185 return base_t::do_pop_front(size,self);
16187 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16188 if(this->is_unique() && _used_size>=size){
16191 return get<comn_string_data_t<char_T>>(
string_view_t{(char_T*)
_m+_used_size,size});
16194 return base_t::do_pop_back(size,self);
16198 return hash.with_calculated_before(_to->get_hash(_to),_to_size,
string_view_t(
_m.begin(),_used_size));
16201 if(pos+size<=_to_size)
16202 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
16205 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,_to_size-pos);
16206 const auto calculated_size=_to_size-pos;
16208 size-=calculated_size;
16209 before_size+=calculated_size;
16213 before=
hash.with_calculated_before(before,before_size,(
const char_T*)
_m+pos,size);
16218 _m.resize(_used_size);
16222 auto wp = down_cast<this_t*>(with.get());
16223 return _used_size==wp->_used_size;
16226 if(begin < _to_size){
16227 return _to->get_the_largest_complete_data_block_begin_form(begin);
16231 return {
_m.begin()+begin,note::size(_used_size-begin)};
16235 auto wp=down_cast<this_t*>(with.get());
16236 if(!_to->equal_with(wp->_to))
16238 return equal((char_T*)
_m.begin(),(char_T*)wp->_m.begin(),_used_size);
16241 auto wp=down_cast<this_t*>(with.get());
16242 if(
auto tmp=_to->compare_with(wp->_to); tmp!=0)
16244 return compare((char_T*)
_m.begin(),(char_T*)wp->_m.begin(),_used_size);
16247 return _to->get_memory_cost()+
float_size_of(*
this)+
_m.size_in_byte();
16250 template<
typename char_T>
16260 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16262 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/sum_string_data_t.hpp"
16271 template<
typename char_T>
16277 using base_t::self_changed;
16279 using base_t::copy_assign_nothrow;
16280 using base_t::copy_construct_nothrow;
16281 using base_t::move_construct_nothrow;
16282 using base_t::construct_nothrow;
16283 using base_t::destruct_nothrow;
16284 using base_t::clear_nothrow;
16285 using base_t::ptr_reset_nothrow;
16286 using base_t::hash_nothrow;
16287 using base_t::get_data_nothrow;
16288 using base_t::apply_data_nothrow;
16289 using base_t::set_hash_cache;
16298 be_replace_as(_after);
16300 be_replace_as(_before);
16304 if(begin+size<=_before_size)
16305 return _before->get_substr_data(begin,size);
16306 elseif(begin>=_before_size)
16307 return _after->get_substr_data(begin-_before_size,size);
16309 return base_t::get_substr_data(begin,size);
16312 if(type_info<this_t> ==
typeid(*a)){
16313 const auto p = down_cast<this_t*>(a.get());
16314 if(_before_size==p->_before_size){
16315 if(_before!=p->_before)
16316 base_t::equivalent_optimization(_before, p->_before);
16317 if(_after!=p->_after)
16318 base_t::equivalent_optimization(_after, p->_after);
16323 base_t::be_replace_as(a);
16325 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _before_size+_after_size; }
16327 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16328 if(pos<_before_size){
16329 const auto copy_before_begin=pos;
16330 const auto copy_before_end=
min(pos+size,_before_size);
16331 const auto copy_before_size=copy_before_end-copy_before_begin;
16332 _before->copy_part_data_to(to,copy_before_begin,copy_before_size);
16333 if(size!=copy_before_size){
16334 const auto copy_after_size=size-copy_before_size;
16335 to+=copy_before_size;
16336 _after->copy_part_data_to(to,0,copy_after_size);
16340 _after->copy_part_data_to(to,pos-_before_size,size);
16343 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16344 if(index<_before_size)
16345 return _before->arec(index);
16347 return _after->arec(index-_before_size);
16349 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16350 if(this->is_unique()){
16351 if(index<_before_size)
16352 _before->arec_set(index,a,_before);
16354 _after->arec_set(index-_before_size,a,_after);
16358 base_t::arec_set(index,a,p);
16361 if(this->is_unique()){
16362 _before=_before->apply_str_to_begin(str);
16363 _before_size+=str.size();
16368 return base_t::apply_str_to_begin(str);
16371 if(this->is_unique()){
16372 _before=_before->apply_str_to_begin(str);
16373 _before_size+=str->get_size();
16378 return base_t::apply_str_to_begin(str);
16381 if(this->is_unique()){
16382 _after=_after->apply_str_to_end(str);
16383 _after_size+=str.size();
16388 return base_t::apply_str_to_end(str);
16391 if(this->is_unique()){
16392 _after=_after->apply_str_to_end(str);
16393 _after_size+=str->get_size();
16398 return base_t::apply_str_to_end(str);
16401 if(this->is_unique() && _before_size>=size){
16403 if(_before_size==size)
16404 swap(aret,_before);
16406 aret=_before->do_pop_front(size,_before);
16407 _before_size-=size;
16409 be_replace_as(_after);
16414 return base_t::do_pop_front(size,self);
16416 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16417 if(this->is_unique() && _after_size>=size){
16419 if(_before_size==size)
16422 aret=_after->do_pop_back(size,_after);
16425 be_replace_as(_before);
16430 return base_t::do_pop_back(size,self);
16437 result=_before->get_hash(_before);
16439 result=
hash.merge_array_hash_results(result,_before_size,_after->get_hash(_after),_after_size);
16442 result=_after->get_hash(_after);
16446 if(pos<_before_size){
16447 const auto calculate_before_begin=pos;
16448 const auto calculate_before_end=
min(pos+size,_before_size);
16449 const auto calculate_before_size=calculate_before_end-calculate_before_begin;
16450 before=_before->get_others_hash_with_calculated_before(before,before_size,_before,calculate_before_begin,calculate_before_size);
16451 if(size!=calculate_before_size){
16452 const auto calculate_after_size=size-calculate_before_size;
16453 before_size+=calculate_before_size;
16454 before=_after->get_others_hash_with_calculated_before(before,before_size,_after,0,calculate_after_size);
16458 before=_after->get_others_hash_with_calculated_before(before,before_size,_after,pos-_before_size,size);
16463 auto wp=down_cast<this_t*>(with.get());
16464 return _before_size==wp->_before_size;
16467 if(begin < _before_size)
16468 return _before->get_the_largest_complete_data_block_begin_form(begin);
16470 return _after->get_the_largest_complete_data_block_begin_form(begin - _before_size);
16473 auto wp=down_cast<this_t*>(with.get());
16474 if(!this->_before->equal_with(wp->_before))
16476 return this->_after->equal_with(wp->_after);
16479 auto wp=down_cast<this_t*>(with.get());
16480 if(
auto tmp=this->_before->compare_with(wp->_before); tmp!=0)
16482 return this->_after->compare_with(wp->_after);
16485 return float_size_of(*
this)+_before->get_memory_cost()+_after->get_memory_cost();
16488 template<
typename char_T>
16490 return get<sum_string_data_t<char_T>>(
this,str);
16492 template<
typename char_T>
16494 return get<sum_string_data_t<char_T>>(str,
this);
16499 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16501 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/erased_string_data_t.hpp"
16510 template<
typename char_T>
16516 using base_t::self_changed;
16518 using base_t::copy_assign_nothrow;
16519 using base_t::copy_construct_nothrow;
16520 using base_t::move_construct_nothrow;
16521 using base_t::construct_nothrow;
16522 using base_t::destruct_nothrow;
16523 using base_t::clear_nothrow;
16524 using base_t::ptr_reset_nothrow;
16525 using base_t::hash_nothrow;
16526 using base_t::get_data_nothrow;
16527 using base_t::apply_data_nothrow;
16528 using base_t::set_hash_cache;
16536 if(_to_size==_erase_size || !_to_size)
16537 be_replace_as(null_ptr);
16540 erased_string_data_t(
ptr_t str,
size_t erase_pos,
size_t erase_size)
noexcept:_to(str),_to_size(_to->get_size()),_erase_pos(erase_pos),_erase_size(erase_size){
16541 null_equivalent_check();
16545 if(begin+size<_erase_pos)
16546 return _to->get_substr_data(begin,size);
16547 elseif(begin>_erase_pos)
16548 return _to->get_substr_data(begin+_erase_size,size);
16550 return base_t::get_substr_data(begin,size);
16553 if(type_info<this_t> ==
typeid(*a)){
16554 const auto p = down_cast<this_t*>(a.get());
16555 if(_erase_pos==p->_erase_pos && _erase_size==p->_erase_size && _to!=p->_to)
16556 base_t::equivalent_optimization(_to, p->_to);
16559 base_t::be_replace_as(a);
16561 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _to_size-_erase_size; }
16563 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16564 if(pos+size<_erase_pos)
16565 _to->copy_part_data_to(to,pos,size);
16567 _to->copy_part_data_to(to,pos+_erase_size,size);
16569 const auto size_before_erase_pos=_erase_pos-pos;
16570 const auto size_after_erase_pos=size-size_before_erase_pos;
16571 _to->copy_part_data_to(to,pos,size_before_erase_pos);
16572 _to->copy_part_data_to(to+size_before_erase_pos,_erase_pos+_erase_size,size_after_erase_pos);
16577 if(this->is_unique()){
16578 if(pos<=_erase_pos && pos+size>=_erase_pos+_erase_size){
16585 return base_t::do_erase(pos,size);
16587 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16588 if(index>_erase_pos)
16589 return _to->arec(index+_erase_size);
16591 return _to->arec(index);
16594 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16595 if(this->is_unique()){
16596 if(index>_erase_pos)
16597 _to->arec_set(index+_erase_size,a,_to);
16599 _to->arec_set(index,a,_to);
16603 base_t::arec_set(index,a,p);
16606 if(this->is_unique()){
16607 _to=_to->apply_str_to_begin(str);
16608 const auto strsize=str.size();
16610 _erase_pos+=strsize;
16615 return base_t::apply_str_to_begin(str);
16618 if(this->is_unique()){
16619 _to=_to->apply_str_to_begin(str);
16620 const auto strsize=str->get_size();
16622 _erase_pos+=strsize;
16627 return base_t::apply_str_to_begin(str);
16630 if(this->is_unique()){
16631 _to=_to->apply_str_to_end(str);
16632 _to_size+=str.size();
16637 return base_t::apply_str_to_end(str);
16640 if(this->is_unique()){
16641 _to=_to->apply_str_to_end(str);
16642 _to_size+=str->get_size();
16647 return base_t::apply_str_to_end(str);
16650 if(this->is_unique() && _erase_pos > size){
16651 auto aret=_to->do_pop_front(size,_to);
16654 null_equivalent_check();
16659 return base_t::do_pop_front(size,self);
16661 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16662 if(this->is_unique() && _erase_pos+_erase_size <= _to_size-size){
16663 auto aret=_to->do_pop_back(size,_to);
16665 null_equivalent_check();
16670 return base_t::do_pop_back(size,self);
16675 const auto size=get_size();
16676 const auto size_before_erase_pos=_erase_pos;
16677 const auto size_after_erase_pos=size-size_before_erase_pos;
16678 result=_to->get_others_hash_with_calculated_before(result,0,_to,0,size_before_erase_pos);
16679 result=_to->get_others_hash_with_calculated_before(result,size_before_erase_pos,_to,_erase_pos+_erase_size,size_after_erase_pos);
16683 if(pos+size<_erase_pos)
16684 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
16686 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos+_erase_size,size);
16688 const auto size_before_erase_pos=_erase_pos-pos;
16689 const auto size_after_erase_pos=size-size_before_erase_pos;
16690 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size_before_erase_pos);
16691 before=_to->get_others_hash_with_calculated_before(before,before_size+size_before_erase_pos,_to,_erase_pos+_erase_size,size_after_erase_pos);
16697 auto wp = down_cast<this_t*>(with.get());
16698 return _erase_pos == wp->_erase_pos && _erase_size == wp->_erase_size;
16701 if(begin < _erase_pos){
16702 auto aret=_to->get_the_largest_complete_data_block_begin_form(begin);
16703 if(aret.size() > _erase_pos){
16704 aret = {aret.begin(),_erase_pos};
16709 return _to->get_the_largest_complete_data_block_begin_form(begin + _erase_size);
16712 auto wp=down_cast<this_t*>(with.get());
16713 if(!_to->equal_with(wp->_to,0,_erase_pos))
16715 return _to->equal_with(wp->_to,_erase_pos+_erase_size,_to_size);
16718 auto wp=down_cast<this_t*>(with.get());
16719 if(
auto tmp=_to->compare_with(wp->_to,0,_erase_pos); tmp!=0)
16721 return _to->compare_with(wp->_to,_erase_pos+_erase_size,_to_size);
16727 template<
typename char_T>
16729 if(size==get_size())
16732 return get<erased_string_data_t<char_T>>(
this,pos,size);
16737 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
16738 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/inserted_string_data_t.hpp"
16747 template<
typename char_T>
16753 using base_t::self_changed;
16755 using base_t::copy_assign_nothrow;
16756 using base_t::copy_construct_nothrow;
16757 using base_t::move_construct_nothrow;
16758 using base_t::construct_nothrow;
16759 using base_t::destruct_nothrow;
16760 using base_t::clear_nothrow;
16761 using base_t::ptr_reset_nothrow;
16762 using base_t::hash_nothrow;
16763 using base_t::get_data_nothrow;
16764 using base_t::apply_data_nothrow;
16765 using base_t::set_hash_cache;
16773 inserted_string_data_t(
ptr_t to,
ptr_t insert_data,
size_t insert_pos)
noexcept:_to(to),_insert_data(insert_data),_insert_pos(insert_pos),_to_size(to->get_size()),_insert_size(insert_data->get_size()){}
16776 if(begin+size<_insert_pos)
16777 return _to->get_substr_data(begin,size);
16778 elseif(begin>_insert_pos+_insert_size)
16779 return _to->get_substr_data(begin-_insert_size,size);
16780 elseif(begin>=_insert_pos && begin+size<=_insert_pos+_insert_size)
16781 return _insert_data->get_substr_data(begin-_insert_pos,size);
16783 return base_t::get_substr_data(begin,size);
16786 if(type_info<this_t> ==
typeid(*a)){
16787 const auto p = down_cast<this_t*>(a.get());
16788 if(_insert_pos==p->_insert_pos && _insert_size==p->_insert_size){
16790 base_t::equivalent_optimization(_to, p->_to);
16791 if(_insert_data!=p->_insert_data)
16792 base_t::equivalent_optimization(_insert_data, p->_insert_data);
16796 _insert_data.reset();
16797 base_t::be_replace_as(a);
16799 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _to_size+_insert_size; }
16801 virtual void copy_part_data_to(char_T* to,
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
16802 if(pos+size<_insert_pos)
16803 _to->copy_part_data_to(to,pos,size);
16804 elseif(pos>_insert_pos+_insert_size)
16805 _to->copy_part_data_to(to,pos-_insert_size,size);
16807 if(_insert_pos>pos){
16808 auto size_before_insert_pos=_insert_pos-pos;
16809 _to->copy_part_data_to(to,pos,size_before_insert_pos);
16810 to+=size_before_insert_pos;
16811 size-=size_before_insert_pos;
16813 auto size_before_insert_end=
min(size,_insert_size);
16814 _insert_data->copy_part_data_to(to,0,size_before_insert_end);
16815 to+=size_before_insert_end;
16816 size-=size_before_insert_end;
16818 _to->copy_part_data_to(to,_insert_pos,size);
16823 if(this->is_unique()){
16824 if(pos>=_insert_pos && pos<=_insert_pos+_insert_size){
16825 _insert_data=_insert_data->do_insert(pos-_insert_pos,str);
16826 _insert_size+=str.size();
16828 elseif(pos<_insert_pos){
16829 _to=_to->do_insert(pos,str);
16830 _to_size+=str.size();
16831 _insert_pos+=str.size();
16833 elseif(pos>_insert_pos+_insert_size){
16834 _to=_to->do_insert(pos-_insert_size,str);
16835 _to_size+=str.size();
16840 return base_t::do_insert(pos,str);
16843 if(this->is_unique()){
16844 if(pos>=_insert_pos && pos+size<=_insert_pos+_insert_size){
16845 _insert_data=_insert_data->do_erase(pos-_insert_pos,size);
16846 _insert_size-=size;
16850 elseif(pos+size<_insert_pos){
16851 _to=_to->do_erase(pos,size);
16857 elseif(pos>_insert_pos+_insert_size){
16858 _to=_to->do_erase(pos-_insert_size,size);
16864 return base_t::do_erase(pos,size);
16866 [[nodiscard]]
virtual char_T
arec(
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
16867 if(index>=_insert_pos && index<_insert_pos+_insert_size)
16868 return _insert_data->arec(index-_insert_pos);
16869 elseif(index>=_insert_pos+_insert_size)
16870 return _to->arec(index-_insert_size);
16872 return _to->arec(index);
16875 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
16876 if(this->is_unique()){
16877 if(index>=_insert_pos && index<_insert_pos+_insert_size)
16878 _insert_data->arec_set(index-_insert_pos,a,p);
16879 elseif(index>=_insert_pos+_insert_size)
16880 _to->arec_set(index-_insert_size,a,p);
16882 _to->arec_set(index,a,p);
16886 base_t::arec_set(index,a,p);
16889 if(this->is_unique()){
16890 const auto size=str.size();
16891 if(_insert_pos==0){
16892 _insert_data=_insert_data->apply_str_to_begin(str);
16893 _insert_size+=size;
16896 _to=_to->apply_str_to_begin(str);
16897 _to_size+=str.size();
16904 return base_t::apply_str_to_begin(str);
16907 if(this->is_unique()){
16908 const auto size=str->get_size();
16909 if(_insert_pos==0){
16910 _insert_data=_insert_data->apply_str_to_begin(str);
16911 _insert_size+=size;
16914 _to=_to->apply_str_to_begin(str);
16915 _to_size+=str->get_size();
16922 return base_t::apply_str_to_begin(str);
16925 if(this->is_unique()){
16926 if(_insert_pos==_to_size){
16927 _insert_data=_insert_data->apply_str_to_end(str);
16928 _insert_size+=str.size();
16931 _to=_to->apply_str_to_end(str);
16932 _to_size+=str.size();
16938 return base_t::apply_str_to_end(str);
16941 if(this->is_unique()){
16942 if(_insert_pos==_to_size){
16943 _insert_data=_insert_data->apply_str_to_end(str);
16944 _insert_size+=str->get_size();
16947 _to=_to->apply_str_to_end(str);
16948 _to_size+=str->get_size();
16954 return base_t::apply_str_to_end(str);
16957 if(this->is_unique()){
16958 if(_insert_pos > size){
16959 auto aret=_to->do_pop_front(size,_to);
16965 elseif(_insert_pos==0 && _insert_size>=size){
16966 auto aret=_insert_data->do_pop_front(size,_insert_data);
16967 _insert_size-=size;
16972 return base_t::do_pop_front(size,self);
16974 [[nodiscard]]
virtual ptr_t do_pop_back(
size_t size,
ptr_t& self)
noexcept(construct_nothrow&©_assign_nothrow)
override final{
16975 if(this->is_unique()){
16976 if(_insert_pos+_insert_size <= _to_size-size){
16977 auto aret=_to->do_pop_back(size,_to);
16982 elseif(_insert_pos==_to_size && _insert_size>=size){
16983 auto aret=_insert_data->do_pop_front(size,_insert_data);
16984 _insert_size-=size;
16989 return base_t::do_pop_back(size,self);
16995 result=_to->get_others_hash_with_calculated_before(result,0,_to,0,_insert_pos);
16997 result=
hash.merge_array_hash_results(result,_insert_pos,_insert_data->get_hash(_insert_data),_insert_size);
16998 const auto size=_to_size-_insert_pos;
17000 result=_to->get_others_hash_with_calculated_before(result,_insert_pos+_insert_size,_to,_insert_pos,size);
17004 if(pos+size<_insert_pos)
17005 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size);
17006 elseif(pos>_insert_pos+_insert_size)
17007 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos-_insert_size,size);
17009 if(_insert_pos>pos){
17010 const auto size_before_insert_pos=_insert_pos-pos;
17011 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,pos,size_before_insert_pos);
17012 size-=size_before_insert_pos;
17013 before_size+=size_before_insert_pos;
17015 auto size_before_insert_end=
min(size,_insert_size);
17016 before=_insert_data->get_others_hash_with_calculated_before(before,before_size,_insert_data,0,size_before_insert_end);
17017 size-=size_before_insert_end;
17018 before_size+=size_before_insert_end;
17020 before=_to->get_others_hash_with_calculated_before(before,before_size,_to,_insert_pos,size);
17026 auto wp=down_cast<this_t*>(with.get());
17027 return _insert_pos==wp->_insert_pos && _insert_size==wp->_insert_size;
17030 if(index>=_insert_pos && index<_insert_pos+_insert_size)
17031 return _insert_data->get_the_largest_complete_data_block_begin_form(index-_insert_pos);
17032 elseif(index>=_insert_pos+_insert_size)
17033 return _to->get_the_largest_complete_data_block_begin_form(index-_insert_size);
17035 auto aret=_to->get_the_largest_complete_data_block_begin_form(index);
17036 if(aret.size()+index > _insert_pos)
17037 aret = {aret.begin(), note::size(_insert_pos-index)};
17042 auto wp=down_cast<this_t*>(with.get());
17043 if(!_insert_data->equal_with(wp->_insert_data))
17045 return _to->equal_with(wp->_to);
17048 auto wp=down_cast<this_t*>(with.get());
17049 if(
auto tmp=_to->compare_with(wp->_to,0,_insert_pos); tmp!=0)
17051 if(
auto tmp=_insert_data->compare_with(wp->_insert_data); tmp!=0)
17053 return _to->compare_with(wp->_to,_insert_pos,_to_size-(_insert_pos+_insert_size));
17056 return float_size_of(*
this)+_insert_data->get_memory_cost()+_to->get_memory_cost();
17059 template<
typename char_T>
17061 return get<inserted_string_data_t<char_T>>(
this,str,pos);
17063 template<
typename char_T>
17066 return this->apply_str_to_begin(str);
17068 return this->apply_str_to_end(str);
17075 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
17079 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/same_value_compress_string_data_t.hpp"
17088 template<
typename char_T>
17094 using base_t::self_changed;
17096 using base_t::copy_assign_nothrow;
17097 using base_t::copy_construct_nothrow;
17098 using base_t::move_construct_nothrow;
17099 using base_t::construct_nothrow;
17100 using base_t::destruct_nothrow;
17101 using base_t::clear_nothrow;
17102 using base_t::ptr_reset_nothrow;
17103 using base_t::hash_nothrow;
17104 using base_t::get_data_nothrow;
17105 using base_t::apply_data_nothrow;
17106 using base_t::set_hash_cache;
17114 base_t::be_replace_as(a);
17117 return get<same_value_compress_string_data_t<char_T>>(size,_value);
17119 [[nodiscard]]
virtual size_t get_size()noexcept override final{
return _size; }
17121 virtual void copy_part_data_to(char_T* to,[[maybe_unused]]
size_t pos,
size_t size)
noexcept(copy_assign_nothrow)
override final{
17122 copy_assign[size](_value,note::to(to));
17125 [[nodiscard]]
virtual char_T
arec([[maybe_unused]]
size_t index)
noexcept(copy_construct_nothrow&&move_construct_nothrow)
override final{
17128 virtual void arec_set(
size_t index,char_T a,
ptr_t& p)
noexcept(copy_assign_nothrow&&move_construct_nothrow)
override final{
17129 base_t::arec_set(index,a,p);
17132 if(this->is_unique()){
17138 return get<same_value_compress_string_data_t<char_T>>(_size-size,_value);
17141 if(this->is_unique()){
17147 return get<same_value_compress_string_data_t<char_T>>(_size-size,_value);
17151 return hash.repeat_times(_value,_size);
17154 return hash.merge_array_hash_results(before,before_size,
hash.repeat_times(_value,size),size);
17161 if constexpr(construct<char_T>.trivial<
const char_T&> && destruct.
trivial<char_T>){
17162 constexpr size_t data_size=512;
17163 static char_T data[data_size];
17164 if(data[0]!=_value)
17165 copy_assign[data_size](_value,note::to(data));
17166 return {data,note::size(
min(_size-begin,data_size))};
17169 return {&_value,note::size<size_t>(1)};
17172 auto wp=down_cast<this_t*>(with.get());
17173 return equal(_value,wp->_value);
17176 auto wp=down_cast<this_t*>(with.get());
17177 return compare(_value,wp->_value);
17186 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/string_data_t/_body.hpp"
17191 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/defs.hpp"
17192 template<
typename char_T>
17194 static_assert(type_info<char_T> != type_info<const char_T>);
17204 static constexpr size_t npos = range_n::npos;
17208 mutable union _cso_info_t{
17214 constexpr _cso_info_t()
noexcept{}
17215 constexpr _cso_info_t(
const _cso_info_t&a)
noexcept{
17219 constexpr void operator=(
const _cso_info_t&a)
noexcept{
17222 ~_cso_info_t()
noexcept{}
17225 mutable struct _cso_flags_t{
17227 bool _str_cso_flag=0;
17231 #define _m _cso_info._mptr
17236 constexpr void _ncso_destruct_mptr()const noexcept{destruct(&
_m);}
17238 constexpr void _ncso_construct_mptr()const noexcept{construct<ptr_t>[&
_m]();}
17240 constexpr void _ncso_construct_mptr(ptr_t p)
const noexcept{construct<ptr_t>[&
_m](p);}
17245 [[nodiscard]]
bool _in_cso()const noexcept{
return _cso_flags._cso_flag;}
17246 [[nodiscard]]
bool _in_str_cso()const noexcept{
return _in_cso() && _cso_flags._str_cso_flag;}
17247 [[nodiscard]]
bool _in_chr_cso()const noexcept{
return _in_cso() && !_cso_flags._str_cso_flag;}
17250 constexpr void _set_str_cso()const noexcept{_cso_flags._cso_flag=1;_cso_flags._str_cso_flag=1;}
17251 constexpr void _set_chr_cso()const noexcept{_cso_flags._cso_flag=1;_cso_flags._str_cso_flag=0;}
17252 constexpr void _set_not_cso()const noexcept{_cso_flags._cso_flag=0;}
17256 [[nodiscard]]
const char_T* _get_cso_data()const noexcept{
return _in_str_cso()?_cso_info._str->str():&_cso_info._ch;}
17257 [[nodiscard]]
size_t _get_cso_size()const noexcept{
return _in_str_cso()?_cso_info._str->size():1;}
17258 [[nodiscard]]
hash_t _get_cso_hash()const noexcept{
return _in_str_cso()?
hash(_get_cso_constexpr_str()):
hash(_cso_info._ch);}
17259 [[nodiscard]]constexpr_str_t& _get_cso_constexpr_str()const noexcept{
return *_cso_info._str;}
17263 constexpr void _cso_init(constexpr_str_t&str)
noexcept{_set_str_cso();_cso_info._str=&str;}
17264 constexpr void _cso_reinit(constexpr_str_t&str)
noexcept{
if(!_in_cso())_ncso_destruct_mptr();_cso_init(str);}
17265 constexpr void _cso_init(char_T ch)
noexcept{_set_chr_cso();_cso_info._ch=ch;}
17266 constexpr void _cso_reinit(char_T ch)
noexcept{
if(!_in_cso())_ncso_destruct_mptr();_cso_init(ch);}
17267 void _cso_fin(
bool need_write)
const noexcept{
17268 if(_in_str_cso()&&!need_write)
17269 _ncso_construct_mptr(get<constexpr_string_data_t<char_T>>(*_cso_info._str));
17271 auto str=string_view_t{_get_cso_data(),_get_cso_size()};
17272 _ncso_construct_mptr(get<comn_string_data_t<char_T>>(str));
17276 void _cso_fin(ptr_t p)
noexcept{
17278 _ncso_construct_mptr(p);
17283 static constexpr bool the_size_worth_to_end_cso(
size_t size)
noexcept{
17284 constexpr auto max_size=
max(
sizeof(comn_string_data_t<char_T>)*2/
sizeof(char_T),(
size_t)1);
17285 return size>=max_size;
17287 static void full_copy_cso_check(
const string_t&str)
noexcept{
17288 if(the_size_worth_to_end_cso(str.size()))
17294 void _cso_check(
bool need_write=0)const noexcept{
17296 _cso_fin(need_write);
17300 string_t(ptr_t str)
noexcept{_ncso_construct_mptr(str);}
17302 [[nodiscard]]ptr_t ptr_copy()const noexcept{
17309 if(_in_cso()||a._in_cso()){
17310 swap(_cso_info,a._cso_info);
17311 swap(_cso_flags,a._cso_flags);
17325 _cso_info=str._cso_info;
17326 _cso_flags=str._cso_flags;
17329 _ncso_construct_mptr(str._m);
17335 string_t(char_T ch,
size_t size)
noexcept requires(type_info<size_t>!=type_info<char_T>):
string_t(size,ch){}
17351 full_copy_cso_check(str);
17353 return operator+(str.to_string_view_t());
17355 return ptr_copy()->apply_str_to_end(str._m);
17358 return ptr_copy()->apply_str_to_end(str);
17364 return str2.ptr_copy()->apply_str_to_begin(str1);
17387 template<
typename U>
17390 return move(*
this);
17399 return _m->get_memory_cost();
17404 if(a._in_str_cso())
17405 return operator<=>(a._get_cso_constexpr_str());
17407 return operator<=>(a.to_string_view_t());
17408 auto ssize = size();
17409 auto scom =
compare(ssize,a.size());
17412 return _m->compare_with(a._m);
17421 if(a._in_str_cso())
17422 return operator==(a._get_cso_constexpr_str());
17425 auto ssize = size();
17426 const auto seq =
equal(ssize,a.size());
17429 return _m->equal_with(a._m);
17431 return a==_get_cso_constexpr_str();
17433 return a==to_string_view_t();
17438 auto ssize = size();
17439 auto scom =
compare(ssize,a.size());
17442 return compare(data(),a.begin(),ssize);
17444 return _m->compare_with(a);
17449 auto ssize = size();
17450 const auto seq =
equal(ssize,a.size());
17453 return equal(data(),a.begin(),ssize);
17455 return _m->equal_with(a);
17460 if(_in_cso() && data()==a.str())
17461 return strong_ordering::equivalent;
17468 if(_in_cso() && data()==a.str())
17479 return _m->compare_with(a);
17485 return _m->equal_with(a);
17489 [[nodiscard]]char_T* unique_c_str()noexcept{ _cso_check(1);
return _m->get_unique_c_str(
_m); }
17491 [[nodiscard]]char_T
arec(
size_t index)
noexcept{
17493 return _get_cso_data()[index];
17495 return _m->arec(index);
17497 void arec_set(
size_t index,char_T a)
noexcept{ _cso_check(1);
return _m->arec_set(index,a,
_m); }
17507 [[nodiscard]]
operator char_T()const&&noexcept{
return _to->
arec(_index); }
17510 return move(*
this);
17514 [[nodiscard]]char_T* get_address()noexcept{
return _to->unique_c_str()+_index; }
17515 [[nodiscard]]
const char_T* get_address()const noexcept{
return (
add_const(_to))->c_str()+_index; }
17517 [[nodiscard]]char_T*
operator&()&&
noexcept{
return get_address(); }
17518 [[nodiscard]]
const char_T*
operator&()const&&noexcept{
return get_address(); }
17537 return *
this+move(ch).operator char_T();
17540 return *
this+=move(ch).operator char_T();
17546 magic_number::linear_interpolation::get_result(
declvalue(
size_t),
17550 static auto floating_arec_result_type_helper()noexcept{
17551 if constexpr(floating_arec_result_able)
17552 return magic_number::linear_interpolation::get_result(
size_t{},
17553 magic_number::linear_interpolation::get_k(char_T{},char_T{}),
17556 typedef decltype(floating_arec_result_type_helper()) floating_arec_result_type;
17558 magic_number::linear_interpolation::get_reverse_result(
17563 static constexpr bool floating_arec_able=floating_arec_result_able||floating_arec_set_able;
17572 static constexpr bool result_able=floating_arec_result_able;
17573 static constexpr bool set_able=floating_arec_set_able;
17576 _index_x1=
static_cast<size_t>(index);
17577 _index_x2=_index_x1+1;
17580 [[nodiscard]]
operator floating_arec_result_type()const&&noexcept requires result_able{
17581 char_T y1=_to->
arec(_index_x1);
17582 char_T y2=_to->
arec(_index_x2);
17583 auto δx=_index-_index_x1;
17584 return magic_number::linear_interpolation::get_result(y1,
17585 magic_number::linear_interpolation::get_k(y1,y2),
17589 char_T y1=_to->
arec(_index_x1);
17590 char_T y2=_to->
arec(_index_x2);
17591 auto k=magic_number::linear_interpolation::get_k(y1,y2);
17592 auto δx1=_index-_index_x1;
17593 auto δx2=_index-_index_x2;
17594 y1=(char_T)magic_number::linear_interpolation::get_reverse_result(k,δx1,a);
17595 y2=(char_T)magic_number::linear_interpolation::get_reverse_result(k,δx2,a);
17598 return move(*
this);
17605 template<
typename T> requires ::std::is_arithmetic_v<T>
17607 if constexpr(::std::is_floating_point_v<T>)
17608 return operator[](
static_cast<float_t>(index));
17610 return operator[](
static_cast<size_t>(index));
17612 template<
typename T> requires ::std::is_arithmetic_v<T>
17614 if constexpr(::std::is_floating_point_v<T>)
17615 return operator[](
static_cast<float_t>(index));
17617 return operator[](
static_cast<size_t>(index));
17621 size=
min(size,this->size()-begin);
17624 return _m->get_substr_data(begin,size);
17629 [[nodiscard]]
const char_T*
data()const noexcept{
if(_in_cso())
return _get_cso_data();
else return _m->get_data(
_m); }
17631 [[nodiscard]]
const char_T*
c_str()const noexcept{
if(_in_cso())
return _get_cso_data();
else return _m->get_const_c_str(
_m); }
17633 [[nodiscard]]
size_t size()const noexcept{
if(_in_cso())
return _get_cso_size();
else return _m->get_size(); }
17634 [[nodiscard]]
explicit operator bool()const noexcept{
return size(); }
17635 [[nodiscard]]
bool empty()const noexcept{
return !size(); }
17636 [[nodiscard]]
size_t length()const noexcept{
return size(); }
17638 const auto size=this->size();
17640 *
this=substr(0,nsize);
17645 _m=get<end_apply_string_data_t<char_T>>(
_m,nsize-size,ch);
17651 const auto size=this->size();
17653 *
this=substr(0,nsize);
17658 _m=get<end_apply_string_data_t<char_T>>(
_m,nsize-size);
17665 struct iterator_base_t{
17669 [[nodiscard]]
constexpr iterator_base_t get_before()const noexcept{
return{_to,_index-1}; }
17670 [[nodiscard]]
constexpr iterator_base_t get_next()const noexcept{
return{_to,_index+1}; }
17671 [[nodiscard]]arec_t get_value()noexcept{
return (*_to)[_index]; }
17672 [[nodiscard]]
const arec_t get_value()const noexcept{
return (*
add_const(_to))[_index]; }
17673 [[nodiscard]]char_T*
get_handle()noexcept{
return &get_value(); }
17674 [[nodiscard]]
const char_T*
get_handle()const noexcept{
return &get_value(); }
17675 [[nodiscard]]
constexpr bool operator==(
const iterator_base_t& a)
const noexcept{
return _to==a._to && _index==a._index; }
17676 [[nodiscard]]
constexpr auto operator<=>(
const iterator_base_t& a)
const noexcept{
return _to==a._to ? _index<=>a._index : partial_ordering::unordered; }
17678 [[nodiscard]]iterator_base_t get_iterator_data_at(ptrdiff_t index)
const noexcept{
return iterator_base_t{(
string_t*)
this,index}; }
17707 full_copy_cso_check(*
this);
17708 full_copy_cso_check(str);
17709 if(_in_cso()&&!str._in_cso())
17710 _cso_fin(str._m->apply_str_to_begin(to_string_view_t()));
17712 push_back(str.to_string_view_t());
17716 _m=
_m->apply_str_to_end(str._m);
17725 full_copy_cso_check(*
this);
17726 full_copy_cso_check(str);
17727 if(_in_cso()&&!str._in_cso())
17728 _cso_fin(str._m->apply_str_to_end(to_string_view_t()));
17730 push_front(str.to_string_view_t());
17734 _m=
_m->apply_str_to_begin(str._m);
17753 [[nodiscard]]
explicit operator hash_t()const noexcept{
return _in_cso()?_get_cso_hash():
_m->get_hash(
_m); }
17757 [[nodiscard]]
size_t find(
const char_T ch,
size_t begin=0)const noexcept(find_nothrow){
17758 return in_range_size_t(ch, to_string_view_t().substr(begin));
17761 return in_range_but_reverse_size_t(ch, to_string_view_t());
17764 return in_range_size_t(str, to_string_view_t().substr(begin));
17767 return in_range_but_reverse_size_t(str, to_string_view_t());
17770 return in_range_size_t(str, to_string_view_t().substr(begin));
17773 return in_range_but_reverse_size_t(str, to_string_view_t());
17775 [[nodiscard]]
size_t find(
const string_t&str,
size_t begin=0)const noexcept(find_nothrow){
17777 if(str._in_str_cso())
17778 return find(str._get_cso_constexpr_str(),begin);
17780 return find(str._cso_info._ch,begin);
17782 auto result = str._m->get_match_pattern_from_self(str._m).match(to_string_view_t().substr(begin));
17784 return result - data();
17790 if(str._in_str_cso())
17791 return reverse_find(str._get_cso_constexpr_str());
17793 return reverse_find(str._cso_info._ch);
17795 auto result = str._m->get_reverse_match_pattern_from_self(str._m).match(to_string_view_t());
17797 return result - data();
17803 return range_n::find_first_of_size_t(str,to_string_view_t());
17806 return range_n::find_first_of_size_t(str,to_string_view_t());
17810 if(str._in_str_cso())
17811 return find_first_of(str._get_cso_constexpr_str());
17813 return find(str._cso_info._ch);
17815 return find_first_of(str.to_string_view_t());
17824 return find(move(ch).
operator char_T());
17827 return range_n::find_first_not_of_size_t(str,to_string_view_t());
17830 return range_n::find_first_not_of_size_t(str,to_string_view_t());
17834 if(str._in_str_cso())
17835 return find_first_not_of(str._get_cso_constexpr_str());
17837 return find_first_not_of(str.to_string_view_t());
17839 return find_first_not_of(str.to_string_view_t());
17848 return find_first_not_of(
string_view_t(move(ch).
operator char_T()));
17851 return range_n::find_last_of_size_t(str,to_string_view_t());
17854 return range_n::find_last_of_size_t(str,to_string_view_t());
17858 if(str._in_str_cso())
17859 return find_last_of(str._get_cso_constexpr_str());
17861 return reverse_find(str._cso_info._ch);
17863 return find_last_of(str.to_string_view_t());
17865 [[nodiscard]]
size_t find_last_of(
const char_T*str)
const noexcept(find_nothrow){
17869 return reverse_find(ch);
17872 return reverse_find(move(ch).
operator char_T());
17875 return range_n::find_last_not_of_size_t(str,to_string_view_t());
17878 return range_n::find_last_not_of_size_t(str,to_string_view_t());
17882 if(str._in_str_cso())
17883 return find_last_not_of(str._get_cso_constexpr_str());
17885 return find_last_not_of(str.to_string_view_t());
17887 return find_last_not_of(str.to_string_view_t());
17896 return find_last_not_of(move(ch).
operator char_T());
17902 auto pos=find(delimiter);
17903 auto end=find(delimiter,pos);
17906 end=find(delimiter,pos);
17908 return substr(pos,
end-pos);
17911 auto pos=find(delimiter_str);
17912 auto end=find(delimiter_str,pos);
17915 end=find(delimiter_str,pos);
17917 return substr(pos,
end-pos);
17920 auto pos=find(delimiter_str);
17921 auto end=find(delimiter_str,pos);
17924 end=find(delimiter_str,pos);
17926 return substr(pos,
end-pos);
17929 auto pos=find(delimiter_str);
17930 auto end=find(delimiter_str,pos);
17933 end=find(delimiter_str,pos);
17935 return substr(pos,
end-pos);
17940 void erase(
size_t pos,
size_t size=1)&
noexcept{
17941 _cso_check();
_m=
_m->do_erase(pos,size);
17945 full_copy_cso_check(str);
17947 _m=
_m->do_insert(pos,str.to_string_view_t());
17949 _m=
_m->do_insert(pos,str);
17952 _cso_check();
_m=
_m->do_insert(pos,str);
17954 void insert(
size_t pos,
const char_T* str)&
noexcept{
17965 return find(str) != npos;
17968 return find(str) != npos;
17971 return find(str) != npos;
17974 return find(ch) != npos;
17977 return find(str) != npos;
17982 if(size()<str.size())
17984 return substr(0,str.size()) == str;
17987 if(size()<str.size())
17989 return substr(0,str.size()) == str;
17992 if(size()<str.size())
17994 if(str._in_chr_cso())
17995 return starts_with(str._cso_info._ch);
17997 return substr(0,str.size()) == str;
18002 return operator[](0) == ch;
18010 if(size()<str.size())
18012 return substr(size()-str.size()) == str;
18015 if(size()<str.size())
18017 return substr(size()-str.size()) == str;
18020 if(size()<str.size())
18022 if(str._in_chr_cso())
18023 return ends_with(str._cso_info._ch);
18025 return substr(size()-str.size()) == str;
18030 return operator[](size()-1) == ch;
18047 template<
class char_T>
18049 template<
class char_T>
18053 template<
typename T>
18057 template<
typename some_fucking_std_ostream,
typename T>
18058 decltype(
auto)
operator<<(some_fucking_std_ostream& stream,
const string_t<T>& str){
18059 typedef some_fucking_std_ostream stream_t;
18060 typedef stream_t::traits_type traits_t;
18061 typename stream_t::iostate state = stream_t::goodbit;
18065 size_t size = str.
size();
18066 if(stream.width() <= 0 ||
static_cast<size_t>(stream.width()) <= size)
18069 pad =
static_cast<size_t>(stream.width()) - size;
18071 const typename stream_t::sentry isok(stream);
18074 state |= stream_t::badbit;
18077 if((stream.flags() & stream_t::adjustfield) != stream_t::left){
18078 for(; 0 < pad; --pad){
18079 if(traits_t::eq_int_type(traits_t::eof(), stream.rdbuf()->sputc(stream.fill()))){
18080 state |= stream_t::badbit;
18086 if(state == stream_t::goodbit && stream.rdbuf()->sputn(str.
c_str(),
static_cast<::std::streamsize
>(size)) !=
static_cast<::std::streamsize
>(size))
18087 state |= stream_t::badbit;
18089 for(; 0 < pad; --pad){
18090 if(traits_t::eq_int_type(traits_t::eof(), stream.rdbuf()->sputc(stream.fill()))){
18091 state |= stream_t::badbit;
18100 stream.setstate(stream_t::badbit,
true);
18104 stream.setstate(state);
18119 using string_n::string_t;
18120 using string_n::string;
18124 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18126 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
18134 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
18145 #if defined(_MSC_VER)
18146 #pragma warning(pop)
18148 #undef suppress_msvc_warning
18149 #undef disable_msvc_warning
18150 #undef push_msvc_warning
18151 #undef pop_msvc_warning
18152 #undef push_and_disable_msvc_warning
18155 #undef BIT_POSSIBILITY
18157 #if defined(ELC_VOID_NAME)
18158 #define void the_void
18163 #undef noexcept_as_auto
18164 #undef constexpr_as
18165 #undef constexpr_as_auto
18167 #undef using_method_from_base_t
18168 #undef using_method_from_value
18173 #undef re_declvalue
18178 #undef template_error
18179 #undef template_warning
18181 #undef type_info_of
18182 #undef type_name_of
18184 #undef is_common_attribute
18185 #undef is_special_attribute
18187 #undef has_attribute
18188 #undef not_has_attribute
18190 #undef float_size_of
18193 #undef def_common_attribute_with_nothing
18194 #undef def_special_attribute_with_nothing
18196 #undef common_attribute_t
18197 #undef special_attribute_t
18200 #undef enabled_by_default
18201 #undef disabled_by_default
18202 #undef enable_if_not_ill_form
18205 #undef was_an_ill_form
18206 #undef was_an_ill_form_with_parameter
18207 #undef was_not_an_ill_form
18208 #undef was_not_an_ill_form_and_noexcept
18209 #undef was_not_an_ill_form_with_parameter
18211 #undef recursive_lambda
18212 #undef get_recursive_lambda_caller
18214 #undef lambda_with_catch
18215 #undef self_recursion
18216 #undef lambda_RLSRRS
18224 #undef _small_than_
18226 #if defined(_MSC_VER)
18232 #undef INTER_NAMESPACE
18233 #undef BREAK_NAMESPACE
18238 #undef template_name
18241 #undef not_in_debug
18246 #undef ELC_TEST_EVENTNAME
18248 #undef override_instance_struct
18252 #undef force_inline
18254 #undef with_no_vtable
18256 #undef in_consteval
18258 #undef no_vtable_struct
18259 #undef no_vtable_class
18263 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
18267 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18270 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18283 #if !defined(ELC_APIS_str_code_convert)
18284 #define ELC_APIS_str_code_convert
18287 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/default_data_type.hpp"
18297 typedef char32_t char_t;
18299 typedef int64_t
int_t;
18301 typedef uint64_t
uint_t;
18310 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18311 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
18320 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
18324 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18326 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18338 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18340 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
18351 #define BIT_POSSIBILITY 2
18355 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18357 #if defined(_MSC_VER)
18358 #pragma warning(push,ELC_WARNING_LEVEL)
18359 #pragma warning(disable:4099)
18360 #pragma warning(disable:26812)
18361 #pragma warning(disable:4584)
18362 #pragma warning(disable:4250)
18363 #pragma warning(disable:26432)
18364 #pragma warning(disable:26435)
18365 #pragma warning(disable:26481)
18366 #pragma warning(disable:26446)
18367 #pragma warning(disable:26434)
18368 #pragma warning(disable:26429)
18369 #pragma warning(disable:26471)
18370 #pragma warning(disable:26474)
18371 #pragma warning(disable:26473)
18372 #pragma warning(disable:26456)
18373 #pragma warning(disable:26485)
18374 #pragma warning(disable:26490)
18375 #pragma warning(disable:26472)
18376 #pragma warning(disable:26482)
18377 #pragma warning(disable:26493)
18379 #if defined(_MSC_VER)
18380 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
18381 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
18382 #define push_msvc_warning() __pragma(warning(push))
18383 #define pop_msvc_warning() __pragma(warning(pop))
18384 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
18386 #define suppress_msvc_warning(...)
18387 #define disable_msvc_warning(...)
18388 #define push_msvc_warning()
18389 #define pop_msvc_warning()
18390 #define push_and_disable_msvc_warning(...)
18393 #if defined(ELC_VOID_NAME)
18398 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
18399 #define noexcept_as_auto MAGIC
18400 #define constexpr_as(...) MAGIC constexpr
18401 #define constexpr_as_auto MAGIC MAGIC constexpr
18403 #define using_method_from_base_t(name,...) \
18404 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
18405 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
18407 return base_t::name(forward<Args>(rest)...);\
18410 #define using_method_from_value(name,value_name,...) \
18411 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
18412 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
18414 return value_name.name(forward<Args>(rest)...);\
18417 #define floop while(__builtin_is_my_dick_still_there())
18418 #define enable_adl(name) void name()noexcept=delete
18420 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
18421 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
18423 #define declvalue(...) (::std::declval<__VA_ARGS__>())
18426 #define template_error(reason) static_assert(template_error_helper<T>,reason)
18428 #define template_warning(reason) template_warning_helper<T>(reason)
18431 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
18432 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
18434 #define is_common_attribute(name) public attribute<T,name<T>>
18435 #define is_special_attribute(name) public attribute<T,name>
18437 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
18438 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
18441 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
18443 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
18446 #define def_common_attribute_with_nothing(name) \
18447 template<typename T>\
18450 #define def_special_attribute_with_nothing(name) \
18453 #define common_attribute_t template<class>class
18454 #define special_attribute_t class
18464 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
18466 #define enabled_by_default class enable_state=void
18468 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
18470 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
18472 #define enable_flag class enable_state
18474 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
18475 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
18476 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
18477 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
18478 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
18481 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
18483 #define get_recursive_lambda_caller(name) \
18484 lambda_with_catch(&)(auto&&...Args){\
18485 return name(name,Args...);\
18490 #define lambda_with_catch(...) [__VA_ARGS__]
18492 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
18494 #define lambda_RLSRRS _my_jb_super_sb_name_
18502 #define elseif else if
18504 #define _big_than_ >
18506 #define _small_than_ <
18508 #if defined(_MSC_VER)
18515 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
18517 #define BREAK_NAMESPACE }
18520 #define template_name template
18522 #define type_name class
18524 #if defined(DEBUG) || defined(_DEBUG)
18525 #define not_in_debug 0
18527 #define not_in_debug 1
18531 #define ec(ch) U ## ch
18533 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
18534 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
18536 #define ELC_TEST_EVENTNAME(name)
18539 #define override_instance_struct \
18541 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
18542 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
18543 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
18544 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
18545 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
18547 #if defined(_WIN32)
18548 #define distinctive __declspec(dllexport)
18550 #define distinctive
18553 #if defined(_WIN32)
18554 #define force_inline __forceinline
18555 #elif defined(__GNUC__)
18556 #define force_inline __attribute__((always_inline)) inline
18558 #define force_inline inline
18561 #if defined(_WIN32)
18562 #define with_no_vtable __declspec(novtable)
18564 #define with_no_vtable
18567 #define in_consteval (::std::is_constant_evaluated())
18569 #define no_vtable_struct struct with_no_vtable
18570 #define no_vtable_class class with_no_vtable
18574 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18578 [[nodiscard]]
inline string_t<char>
to_char_str(string_view_t<char_t> a)
noexcept{
18579 string_t<char>aret;
18580 ::std::mbstate_t stat{};
18581 string_t old_lc=::std::setlocale(LC_CTYPE,
nullptr);
18582 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
18583 die_with(locale::str::setlocale_error);
18585 char r[MB_LEN_MAX];
18589 s=::std::c32rtomb(r,c,&stat);
18591 die_with(locale::str::code_convert_error);
18592 aret+=string_view_t<char>{(
char*)r,note::size((
size_t)s)};
18594 ::std::setlocale(LC_CTYPE,old_lc.c_str());
18598 string_t<char_t>aret;
18599 ::std::mbstate_t stat{};
18600 string_t old_lc=::std::setlocale(LC_CTYPE,
nullptr);
18601 if(::std::setlocale(LC_CTYPE,
"en_US.utf8")==
nullptr)
18602 die_with(locale::str::setlocale_error);
18607 auto i=a.cbegin(),e=a.cend();
18609 s=::std::mbrtoc32(&c,i,MB_LEN_MAX,&stat);
18611 die_with(locale::str::code_convert_error);
18615 ::std::setlocale(LC_CTYPE,old_lc.c_str());
18619 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
18630 #if defined(_MSC_VER)
18631 #pragma warning(pop)
18633 #undef suppress_msvc_warning
18634 #undef disable_msvc_warning
18635 #undef push_msvc_warning
18636 #undef pop_msvc_warning
18637 #undef push_and_disable_msvc_warning
18640 #undef BIT_POSSIBILITY
18642 #if defined(ELC_VOID_NAME)
18643 #define void the_void
18648 #undef noexcept_as_auto
18649 #undef constexpr_as
18650 #undef constexpr_as_auto
18652 #undef using_method_from_base_t
18653 #undef using_method_from_value
18658 #undef re_declvalue
18663 #undef template_error
18664 #undef template_warning
18666 #undef type_info_of
18667 #undef type_name_of
18669 #undef is_common_attribute
18670 #undef is_special_attribute
18672 #undef has_attribute
18673 #undef not_has_attribute
18675 #undef float_size_of
18678 #undef def_common_attribute_with_nothing
18679 #undef def_special_attribute_with_nothing
18681 #undef common_attribute_t
18682 #undef special_attribute_t
18685 #undef enabled_by_default
18686 #undef disabled_by_default
18687 #undef enable_if_not_ill_form
18690 #undef was_an_ill_form
18691 #undef was_an_ill_form_with_parameter
18692 #undef was_not_an_ill_form
18693 #undef was_not_an_ill_form_and_noexcept
18694 #undef was_not_an_ill_form_with_parameter
18696 #undef recursive_lambda
18697 #undef get_recursive_lambda_caller
18699 #undef lambda_with_catch
18700 #undef self_recursion
18701 #undef lambda_RLSRRS
18709 #undef _small_than_
18711 #if defined(_MSC_VER)
18717 #undef INTER_NAMESPACE
18718 #undef BREAK_NAMESPACE
18723 #undef template_name
18726 #undef not_in_debug
18731 #undef ELC_TEST_EVENTNAME
18733 #undef override_instance_struct
18737 #undef force_inline
18739 #undef with_no_vtable
18741 #undef in_consteval
18743 #undef no_vtable_struct
18744 #undef no_vtable_class
18748 #line 65 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
18757 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
18759 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
18767 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18779 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18781 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
18792 #define BIT_POSSIBILITY 2
18796 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
18798 #if defined(_MSC_VER)
18799 #pragma warning(push,ELC_WARNING_LEVEL)
18800 #pragma warning(disable:4099)
18801 #pragma warning(disable:26812)
18802 #pragma warning(disable:4584)
18803 #pragma warning(disable:4250)
18804 #pragma warning(disable:26432)
18805 #pragma warning(disable:26435)
18806 #pragma warning(disable:26481)
18807 #pragma warning(disable:26446)
18808 #pragma warning(disable:26434)
18809 #pragma warning(disable:26429)
18810 #pragma warning(disable:26471)
18811 #pragma warning(disable:26474)
18812 #pragma warning(disable:26473)
18813 #pragma warning(disable:26456)
18814 #pragma warning(disable:26485)
18815 #pragma warning(disable:26490)
18816 #pragma warning(disable:26472)
18817 #pragma warning(disable:26482)
18818 #pragma warning(disable:26493)
18820 #if defined(_MSC_VER)
18821 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
18822 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
18823 #define push_msvc_warning() __pragma(warning(push))
18824 #define pop_msvc_warning() __pragma(warning(pop))
18825 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
18827 #define suppress_msvc_warning(...)
18828 #define disable_msvc_warning(...)
18829 #define push_msvc_warning()
18830 #define pop_msvc_warning()
18831 #define push_and_disable_msvc_warning(...)
18834 #if defined(ELC_VOID_NAME)
18839 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
18840 #define noexcept_as_auto MAGIC
18841 #define constexpr_as(...) MAGIC constexpr
18842 #define constexpr_as_auto MAGIC MAGIC constexpr
18844 #define using_method_from_base_t(name,...) \
18845 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
18846 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
18848 return base_t::name(forward<Args>(rest)...);\
18851 #define using_method_from_value(name,value_name,...) \
18852 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
18853 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
18855 return value_name.name(forward<Args>(rest)...);\
18858 #define floop while(__builtin_is_my_dick_still_there())
18859 #define enable_adl(name) void name()noexcept=delete
18861 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
18862 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
18864 #define declvalue(...) (::std::declval<__VA_ARGS__>())
18867 #define template_error(reason) static_assert(template_error_helper<T>,reason)
18869 #define template_warning(reason) template_warning_helper<T>(reason)
18872 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
18873 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
18875 #define is_common_attribute(name) public attribute<T,name<T>>
18876 #define is_special_attribute(name) public attribute<T,name>
18878 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
18879 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
18882 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
18884 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
18887 #define def_common_attribute_with_nothing(name) \
18888 template<typename T>\
18891 #define def_special_attribute_with_nothing(name) \
18894 #define common_attribute_t template<class>class
18895 #define special_attribute_t class
18905 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
18907 #define enabled_by_default class enable_state=void
18909 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
18911 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
18913 #define enable_flag class enable_state
18915 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
18916 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
18917 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
18918 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
18919 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
18922 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
18924 #define get_recursive_lambda_caller(name) \
18925 lambda_with_catch(&)(auto&&...Args){\
18926 return name(name,Args...);\
18931 #define lambda_with_catch(...) [__VA_ARGS__]
18933 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
18935 #define lambda_RLSRRS _my_jb_super_sb_name_
18943 #define elseif else if
18945 #define _big_than_ >
18947 #define _small_than_ <
18949 #if defined(_MSC_VER)
18956 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
18958 #define BREAK_NAMESPACE }
18961 #define template_name template
18963 #define type_name class
18965 #if defined(DEBUG) || defined(_DEBUG)
18966 #define not_in_debug 0
18968 #define not_in_debug 1
18972 #define ec(ch) U ## ch
18974 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
18975 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
18977 #define ELC_TEST_EVENTNAME(name)
18980 #define override_instance_struct \
18982 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
18983 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
18984 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
18985 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
18986 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
18988 #if defined(_WIN32)
18989 #define distinctive __declspec(dllexport)
18991 #define distinctive
18994 #if defined(_WIN32)
18995 #define force_inline __forceinline
18996 #elif defined(__GNUC__)
18997 #define force_inline __attribute__((always_inline)) inline
18999 #define force_inline inline
19002 #if defined(_WIN32)
19003 #define with_no_vtable __declspec(novtable)
19005 #define with_no_vtable
19008 #define in_consteval (::std::is_constant_evaluated())
19010 #define no_vtable_struct struct with_no_vtable
19011 #define no_vtable_class class with_no_vtable
19015 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19019 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19021 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/literal.hpp"
19030 namespace string_n{
19031 template<constexpr_str_n::constexpr_str_t_literal_helper str_helper>
19032 inline constexpr string operator""_elc_string()noexcept{
19033 return string(constexpr_str_n::operator
""_constexpr_str<str_helper>());
19036 using string_n::operator
""_elc_string;
19040 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19042 #if defined(ELC_TEST_ON)
19043 namespace string_part_test{
19044 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_test.hpp"
19052 inline void test(){
19057 stest_accert(a.size()==0);
19059 stest_accert(a.size()==3);
19061 stest_accert(a.size()==6);
19063 stest_accert(
es"asd"+a==
es"asdasdasdasd");
19065 stest_accert(a.substr(0,3)==
es"aed");
19066 stest_accert(a.substr(3).size()==6);
19067 stest_accert(a[2]==
ec(
'd'));
19069 stest_accert(a.size()==0);
19070 a.resize(3,
ec(
'd'));
19071 stest_accert(a==
es"ddd");
19073 stest_accert(c==
ec(
'd'));
19075 stest_accert(a.begin()==a.cbegin());
19076 stest_accert(*a.begin()==
ec(
'a'));
19077 stest_accert(a.begin()<=a.cend());
19078 stest_accert(*a.rbegin()==
ec(
'c'));
19079 stest_accert(a.rbegin()<=a.rend());
19080 stest_accert(a.rbegin()==a.end()-1);
19081 a.push_back(
es"as");
19082 a.push_front(
ec(
'p'));
19083 stest_accert(a ==
es"pabcas");
19086 stest_accert(a ==
es"ps");
19087 stest_accert(a.pop_front() ==
ec(
'p'));
19088 stest_accert(a.pop_back() ==
ec(
's'));
19089 stest_accert(a.size() == 0);
19091 stest_accert(a.pop_back(2) ==
es"bc");
19092 stest_accert(a.size() == 1);
19093 a.push_front(
es"wqer");
19094 stest_accert(a==
es"wqera");
19095 a.insert(2,
es"123");
19096 a.insert(0,
es"123");
19097 a.insert(a.size(),
es"123");
19098 stest_accert(a[2] ==
ec(
'3'));
19103 stest_accert(a ==
es"123wq6666ra123");
19104 for(
char_t& c: a.view())
19106 stest_accert(a ==
es"77777777777777");
19109 using namespace elc;
19110 using elc::defs::hash;
19111 auto a =
es"ab"_elc_string;
19112 stest_accert(
hash(a) ==
hash(string_view(
es"ab")));
19114 stest_accert(
hash(b) ==
hash(string_view(
es"ab")));
19115 stest_accert(b.memory_cost() > a.memory_cost());
19118 stest_accert(
hash(a) ==
hash(string_view(
es"abab")));
19120 stest_accert(
hash(a) ==
hash(string_view(
es"acbab")));
19122 stest_accert(
hash(a) ==
hash(string_view(
es"ac")));
19123 a.push_back(
es"123");
19124 stest_accert(
hash(a) ==
hash(string_view(
es"ac123")));
19125 a.push_front(
es"123");
19126 stest_accert(
hash(a) ==
hash(string_view(
es"123ac123")));
19129 check_memory_lack();
19131 inline void test_log_out(){
19133 inline void test_end(){
19138 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19142 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19150 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
19161 #if defined(_MSC_VER)
19162 #pragma warning(pop)
19164 #undef suppress_msvc_warning
19165 #undef disable_msvc_warning
19166 #undef push_msvc_warning
19167 #undef pop_msvc_warning
19168 #undef push_and_disable_msvc_warning
19171 #undef BIT_POSSIBILITY
19173 #if defined(ELC_VOID_NAME)
19174 #define void the_void
19179 #undef noexcept_as_auto
19180 #undef constexpr_as
19181 #undef constexpr_as_auto
19183 #undef using_method_from_base_t
19184 #undef using_method_from_value
19189 #undef re_declvalue
19194 #undef template_error
19195 #undef template_warning
19197 #undef type_info_of
19198 #undef type_name_of
19200 #undef is_common_attribute
19201 #undef is_special_attribute
19203 #undef has_attribute
19204 #undef not_has_attribute
19206 #undef float_size_of
19209 #undef def_common_attribute_with_nothing
19210 #undef def_special_attribute_with_nothing
19212 #undef common_attribute_t
19213 #undef special_attribute_t
19216 #undef enabled_by_default
19217 #undef disabled_by_default
19218 #undef enable_if_not_ill_form
19221 #undef was_an_ill_form
19222 #undef was_an_ill_form_with_parameter
19223 #undef was_not_an_ill_form
19224 #undef was_not_an_ill_form_and_noexcept
19225 #undef was_not_an_ill_form_with_parameter
19227 #undef recursive_lambda
19228 #undef get_recursive_lambda_caller
19230 #undef lambda_with_catch
19231 #undef self_recursion
19232 #undef lambda_RLSRRS
19240 #undef _small_than_
19242 #if defined(_MSC_VER)
19248 #undef INTER_NAMESPACE
19249 #undef BREAK_NAMESPACE
19254 #undef template_name
19257 #undef not_in_debug
19262 #undef ELC_TEST_EVENTNAME
19264 #undef override_instance_struct
19268 #undef force_inline
19270 #undef with_no_vtable
19272 #undef in_consteval
19274 #undef no_vtable_struct
19275 #undef no_vtable_class
19279 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19283 #line 31 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19286 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_export.hpp"
19295 #define export using defs::
19300 export operator""_elc_string;
19301 export operator""_constexpr_str;
19306 #line 34 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19308 #if defined(ELC_CORE)
19309 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19320 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19328 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19340 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19342 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
19353 #define BIT_POSSIBILITY 2
19357 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19359 #if defined(_MSC_VER)
19360 #pragma warning(push,ELC_WARNING_LEVEL)
19361 #pragma warning(disable:4099)
19362 #pragma warning(disable:26812)
19363 #pragma warning(disable:4584)
19364 #pragma warning(disable:4250)
19365 #pragma warning(disable:26432)
19366 #pragma warning(disable:26435)
19367 #pragma warning(disable:26481)
19368 #pragma warning(disable:26446)
19369 #pragma warning(disable:26434)
19370 #pragma warning(disable:26429)
19371 #pragma warning(disable:26471)
19372 #pragma warning(disable:26474)
19373 #pragma warning(disable:26473)
19374 #pragma warning(disable:26456)
19375 #pragma warning(disable:26485)
19376 #pragma warning(disable:26490)
19377 #pragma warning(disable:26472)
19378 #pragma warning(disable:26482)
19379 #pragma warning(disable:26493)
19381 #if defined(_MSC_VER)
19382 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
19383 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
19384 #define push_msvc_warning() __pragma(warning(push))
19385 #define pop_msvc_warning() __pragma(warning(pop))
19386 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
19388 #define suppress_msvc_warning(...)
19389 #define disable_msvc_warning(...)
19390 #define push_msvc_warning()
19391 #define pop_msvc_warning()
19392 #define push_and_disable_msvc_warning(...)
19395 #if defined(ELC_VOID_NAME)
19400 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
19401 #define noexcept_as_auto MAGIC
19402 #define constexpr_as(...) MAGIC constexpr
19403 #define constexpr_as_auto MAGIC MAGIC constexpr
19405 #define using_method_from_base_t(name,...) \
19406 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
19407 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
19409 return base_t::name(forward<Args>(rest)...);\
19412 #define using_method_from_value(name,value_name,...) \
19413 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
19414 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
19416 return value_name.name(forward<Args>(rest)...);\
19419 #define floop while(__builtin_is_my_dick_still_there())
19420 #define enable_adl(name) void name()noexcept=delete
19422 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
19423 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
19425 #define declvalue(...) (::std::declval<__VA_ARGS__>())
19428 #define template_error(reason) static_assert(template_error_helper<T>,reason)
19430 #define template_warning(reason) template_warning_helper<T>(reason)
19433 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
19434 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
19436 #define is_common_attribute(name) public attribute<T,name<T>>
19437 #define is_special_attribute(name) public attribute<T,name>
19439 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
19440 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
19443 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
19445 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
19448 #define def_common_attribute_with_nothing(name) \
19449 template<typename T>\
19452 #define def_special_attribute_with_nothing(name) \
19455 #define common_attribute_t template<class>class
19456 #define special_attribute_t class
19466 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
19468 #define enabled_by_default class enable_state=void
19470 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
19472 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
19474 #define enable_flag class enable_state
19476 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
19477 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
19478 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
19479 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
19480 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
19483 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
19485 #define get_recursive_lambda_caller(name) \
19486 lambda_with_catch(&)(auto&&...Args){\
19487 return name(name,Args...);\
19492 #define lambda_with_catch(...) [__VA_ARGS__]
19494 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
19496 #define lambda_RLSRRS _my_jb_super_sb_name_
19504 #define elseif else if
19506 #define _big_than_ >
19508 #define _small_than_ <
19510 #if defined(_MSC_VER)
19517 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
19519 #define BREAK_NAMESPACE }
19522 #define template_name template
19524 #define type_name class
19526 #if defined(DEBUG) || defined(_DEBUG)
19527 #define not_in_debug 0
19529 #define not_in_debug 1
19533 #define ec(ch) U ## ch
19535 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
19536 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
19538 #define ELC_TEST_EVENTNAME(name)
19541 #define override_instance_struct \
19543 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
19544 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
19545 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
19546 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
19547 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
19549 #if defined(_WIN32)
19550 #define distinctive __declspec(dllexport)
19552 #define distinctive
19555 #if defined(_WIN32)
19556 #define force_inline __forceinline
19557 #elif defined(__GNUC__)
19558 #define force_inline __attribute__((always_inline)) inline
19560 #define force_inline inline
19563 #if defined(_WIN32)
19564 #define with_no_vtable __declspec(novtable)
19566 #define with_no_vtable
19569 #define in_consteval (::std::is_constant_evaluated())
19571 #define no_vtable_struct struct with_no_vtable
19572 #define no_vtable_class class with_no_vtable
19576 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19580 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19582 namespace string_n{
19583 template<
class char_T>
19585 size_t i=size_t(use_as<int_t>(index));
19587 i=size_t(use_as<uint_t>(index));
19588 struct arec_data_t final:instance_struct<arec_data_t>
19589 ,value::base_data_t{
19592 arec_data_t(
const arec_data_t&ref)
noexcept:
_m(
special_init,ref._m){}
19593 virtual ~arec_data_t()
noexcept override final=
default;
19595 virtual void be_set(ptr a)
noexcept override final{move(
_m)=use_as<char_T>(a);}
19596 [[nodiscard]]
virtual ptr get_value()
noexcept override final{
return core::make_binary_node_from<char_T>(move(
_m));}
19597 [[nodiscard]]
virtual base_data_t*copy()
const noexcept override final{
return get<arec_data_t>(*
this);}
19598 [[nodiscard]]
virtual base_type_info_t get_type_info()
const noexcept override final{
return type_info<arec_data_t>;}
19600 return get<arec_data_t>(str,i);
19604 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19612 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
19623 #if defined(_MSC_VER)
19624 #pragma warning(pop)
19626 #undef suppress_msvc_warning
19627 #undef disable_msvc_warning
19628 #undef push_msvc_warning
19629 #undef pop_msvc_warning
19630 #undef push_and_disable_msvc_warning
19633 #undef BIT_POSSIBILITY
19635 #if defined(ELC_VOID_NAME)
19636 #define void the_void
19641 #undef noexcept_as_auto
19642 #undef constexpr_as
19643 #undef constexpr_as_auto
19645 #undef using_method_from_base_t
19646 #undef using_method_from_value
19651 #undef re_declvalue
19656 #undef template_error
19657 #undef template_warning
19659 #undef type_info_of
19660 #undef type_name_of
19662 #undef is_common_attribute
19663 #undef is_special_attribute
19665 #undef has_attribute
19666 #undef not_has_attribute
19668 #undef float_size_of
19671 #undef def_common_attribute_with_nothing
19672 #undef def_special_attribute_with_nothing
19674 #undef common_attribute_t
19675 #undef special_attribute_t
19678 #undef enabled_by_default
19679 #undef disabled_by_default
19680 #undef enable_if_not_ill_form
19683 #undef was_an_ill_form
19684 #undef was_an_ill_form_with_parameter
19685 #undef was_not_an_ill_form
19686 #undef was_not_an_ill_form_and_noexcept
19687 #undef was_not_an_ill_form_with_parameter
19689 #undef recursive_lambda
19690 #undef get_recursive_lambda_caller
19692 #undef lambda_with_catch
19693 #undef self_recursion
19694 #undef lambda_RLSRRS
19702 #undef _small_than_
19704 #if defined(_MSC_VER)
19710 #undef INTER_NAMESPACE
19711 #undef BREAK_NAMESPACE
19716 #undef template_name
19719 #undef not_in_debug
19724 #undef ELC_TEST_EVENTNAME
19726 #undef override_instance_struct
19730 #undef force_inline
19732 #undef with_no_vtable
19734 #undef in_consteval
19736 #undef no_vtable_struct
19737 #undef no_vtable_class
19741 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
19745 #line 35 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_multi/string_arec_as_value.hpp"
19750 #line 37 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/string/_body.hpp"
19755 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19760 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
19761 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
19770 #if defined(ELC_TEST)
19771 #error "this part cannot be tested."
19774 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
19787 #line 70 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
19791 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
19792 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19805 #if !defined(ELC_APIS_library_load)
19806 #define ELC_APIS_library_load
19807 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
19819 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
19820 #define SYSTEM_TYPE linux
19821 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
19822 #define SYSTEM_TYPE windows
19824 #define SYSTEM_TYPE other
19826 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
19830 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19831 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19840 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19844 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
19845 #if SYSTEM_TYPE == linux
19847 #elif SYSTEM_TYPE == windows
19849 #include <Windows.h>
19850 #include <Libloaderapi.h>
19851 #include <Errhandlingapi.h>
19853 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
19862 #if !defined(ELC_NUMERICAL_REPRESENTATION)
19863 #define ELC_NUMERICAL_REPRESENTATION
19864 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19873 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
19877 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
19878 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
19887 #if defined(ELC_TEST)
19888 #error "this part cannot be tested."
19891 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
19899 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19911 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19913 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
19924 #define BIT_POSSIBILITY 2
19928 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
19930 #if defined(_MSC_VER)
19931 #pragma warning(push,ELC_WARNING_LEVEL)
19932 #pragma warning(disable:4099)
19933 #pragma warning(disable:26812)
19934 #pragma warning(disable:4584)
19935 #pragma warning(disable:4250)
19936 #pragma warning(disable:26432)
19937 #pragma warning(disable:26435)
19938 #pragma warning(disable:26481)
19939 #pragma warning(disable:26446)
19940 #pragma warning(disable:26434)
19941 #pragma warning(disable:26429)
19942 #pragma warning(disable:26471)
19943 #pragma warning(disable:26474)
19944 #pragma warning(disable:26473)
19945 #pragma warning(disable:26456)
19946 #pragma warning(disable:26485)
19947 #pragma warning(disable:26490)
19948 #pragma warning(disable:26472)
19949 #pragma warning(disable:26482)
19950 #pragma warning(disable:26493)
19952 #if defined(_MSC_VER)
19953 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
19954 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
19955 #define push_msvc_warning() __pragma(warning(push))
19956 #define pop_msvc_warning() __pragma(warning(pop))
19957 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
19959 #define suppress_msvc_warning(...)
19960 #define disable_msvc_warning(...)
19961 #define push_msvc_warning()
19962 #define pop_msvc_warning()
19963 #define push_and_disable_msvc_warning(...)
19966 #if defined(ELC_VOID_NAME)
19971 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
19972 #define noexcept_as_auto MAGIC
19973 #define constexpr_as(...) MAGIC constexpr
19974 #define constexpr_as_auto MAGIC MAGIC constexpr
19976 #define using_method_from_base_t(name,...) \
19977 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
19978 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
19980 return base_t::name(forward<Args>(rest)...);\
19983 #define using_method_from_value(name,value_name,...) \
19984 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
19985 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
19987 return value_name.name(forward<Args>(rest)...);\
19990 #define floop while(__builtin_is_my_dick_still_there())
19991 #define enable_adl(name) void name()noexcept=delete
19993 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
19994 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
19996 #define declvalue(...) (::std::declval<__VA_ARGS__>())
19999 #define template_error(reason) static_assert(template_error_helper<T>,reason)
20001 #define template_warning(reason) template_warning_helper<T>(reason)
20004 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
20005 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
20007 #define is_common_attribute(name) public attribute<T,name<T>>
20008 #define is_special_attribute(name) public attribute<T,name>
20010 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
20011 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
20014 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
20016 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
20019 #define def_common_attribute_with_nothing(name) \
20020 template<typename T>\
20023 #define def_special_attribute_with_nothing(name) \
20026 #define common_attribute_t template<class>class
20027 #define special_attribute_t class
20037 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
20039 #define enabled_by_default class enable_state=void
20041 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
20043 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
20045 #define enable_flag class enable_state
20047 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
20048 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
20049 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
20050 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
20051 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
20054 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
20056 #define get_recursive_lambda_caller(name) \
20057 lambda_with_catch(&)(auto&&...Args){\
20058 return name(name,Args...);\
20063 #define lambda_with_catch(...) [__VA_ARGS__]
20065 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
20067 #define lambda_RLSRRS _my_jb_super_sb_name_
20075 #define elseif else if
20077 #define _big_than_ >
20079 #define _small_than_ <
20081 #if defined(_MSC_VER)
20088 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
20090 #define BREAK_NAMESPACE }
20093 #define template_name template
20095 #define type_name class
20097 #if defined(DEBUG) || defined(_DEBUG)
20098 #define not_in_debug 0
20100 #define not_in_debug 1
20104 #define ec(ch) U ## ch
20106 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
20107 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
20109 #define ELC_TEST_EVENTNAME(name)
20112 #define override_instance_struct \
20114 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
20115 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
20116 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
20117 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
20118 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
20120 #if defined(_WIN32)
20121 #define distinctive __declspec(dllexport)
20123 #define distinctive
20126 #if defined(_WIN32)
20127 #define force_inline __forceinline
20128 #elif defined(__GNUC__)
20129 #define force_inline __attribute__((always_inline)) inline
20131 #define force_inline inline
20134 #if defined(_WIN32)
20135 #define with_no_vtable __declspec(novtable)
20137 #define with_no_vtable
20140 #define in_consteval (::std::is_constant_evaluated())
20142 #define no_vtable_struct struct with_no_vtable
20143 #define no_vtable_class class with_no_vtable
20147 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
20151 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20153 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/defs.hpp"
20165 struct base_numerical_representation_t{};
20169 class numerical_representation_t:
public base_numerical_representation_t{
20171 string _radix_table=
es"0123456789"_constexpr_str;
20175 string _nan=
es"NaN"_constexpr_str;
20176 string _signaling_nan=
es"signaling_NaN"_constexpr_str;
20177 string _quiet_nan=
es"quiet_NaN"_constexpr_str;
20178 string _inf=
es"Inf"_constexpr_str;
20179 char_t _unknown_data_start_sign=
ec(
'[');
20180 char_t _unknown_data_split_sign=
ec(
',');
20181 char_t _unknown_data_end_sign=
ec(
']');
20183 numerical_representation_t()
noexcept=
default;
20184 numerical_representation_t(
const numerical_representation_t&)
noexcept=
default;
20185 numerical_representation_t(numerical_representation_t&&)
noexcept=
default;
20186 numerical_representation_t(
size_t radix,
string radix_table,
20189 string nan,
string signaling_nan,
string quiet_nan,
20191 char_t unknown_data_start_sign,
char_t unknown_data_split_sign,
char_t unknown_data_end_sign
20193 _radix(radix),_radix_table(radix_table),
20194 _fractional_sign(fractional_sign),
20195 _positive_sign(positive_sign),_negative_sign(negative_sign),
20196 _nan(nan),_signaling_nan(signaling_nan),_quiet_nan(quiet_nan),
20198 _unknown_data_start_sign(unknown_data_start_sign),_unknown_data_split_sign(unknown_data_split_sign),_unknown_data_end_sign(unknown_data_end_sign)
20200 numerical_representation_t(
size_t radix,
string radix_table)
noexcept:
20202 _radix_table(radix_table)
20205 void set_radix(
size_t radix)
noexcept{
20208 void set_radix_table(
string radix_table)
noexcept{
20209 _radix_table=radix_table;
20210 _radix=radix_table.size();
20212 void set_fractional_sign(
char_t point)
noexcept{
20213 _fractional_sign=point;
20215 void set_positive_sign(
char_t positive_sign)
noexcept{
20216 _positive_sign=positive_sign;
20218 void set_negative_sign(
char_t negative_sign)
noexcept{
20219 _negative_sign=negative_sign;
20221 void set_nan(
string nan)
noexcept{
20224 void set_inf(
string inf)
noexcept{
20227 [[nodiscard]]
constexpr size_t radix()
const noexcept{
20230 [[nodiscard]]
string radix_table()
const noexcept{
20231 return _radix_table;
20233 [[nodiscard]]
constexpr char_t fractional_sign()
const noexcept{
20234 return _fractional_sign;
20236 [[nodiscard]]
constexpr char_t positive_sign()
const noexcept{
20237 return _positive_sign;
20239 [[nodiscard]]
constexpr char_t negative_sign()
const noexcept{
20240 return _negative_sign;
20242 [[nodiscard]]
string nan()
const noexcept{
20245 [[nodiscard]]
string inf()
const noexcept{
20250 inline size_t get_info_tail_size_per_byte()
const noexcept{
20252 const auto info_threshold = to_size_t(ceil(log(info_threshold_base, _radix)));
20253 return info_threshold;
20255 template<
typename T>
20256 inline size_t get_info_tail_size()
const noexcept{
20257 return get_info_tail_size_per_byte()*
sizeof(T);
20259 template<
typename T>
20260 inline string get_info_tail(T x)
const noexcept{
20261 auto info_tail_size_per_byte = get_info_tail_size_per_byte();
20263 data_view<const T> view{&x};
20264 for(
const byte c: view){
20265 auto s= to_string_rough((
unsigned char)c);
20266 aret+=
string{info_tail_size_per_byte-s.size(),_radix_table[0]}+s;
20270 template<
typename T>
20271 inline T get_from_info_tail(
string str)
const noexcept{
20272 const auto info_tail_size_per_byte = get_info_tail_size_per_byte();
20274 data_view<T> view{&aret};
20276 auto s=str.substr(0,info_tail_size_per_byte);
20277 c=(byte)from_string_get<unsigned char>(s);
20278 str=str.substr(info_tail_size_per_byte);
20282 template<
typename T>
20283 inline string to_string_num_base(T num)
const noexcept{
20284 if constexpr(::std::is_floating_point_v<T>){
20287 size_t order_of_magnitude;
20289 order_of_magnitude = to_size_t(floor(log(num,_radix)+1));
20291 order_of_magnitude = 0;
20292 aret=_radix_table[0];
20293 aret+=_fractional_sign;
20295 num/=pow(_radix,order_of_magnitude);
20297 aret=_radix_table[to_size_t(num)];
20303 auto info_threshold = to_size_t(ceil(log(info_threshold_base,_radix)));
20305 bool is_mantissa_begined =
false;
20309 T first_char_index;
20310 num=::std::modf(num,&first_char_index);
20311 aret+=_radix_table[to_size_t(first_char_index)];
20313 if(to_size_t(first_char_index))
20314 is_mantissa_begined =
true;
20315 if(is_mantissa_begined){
20320 if(order_of_magnitude){
20321 if(!--order_of_magnitude)
20322 aret+=_fractional_sign;
20325 if(!info_threshold && !order_of_magnitude)
20328 if(order_of_magnitude)
20329 aret.append(order_of_magnitude,_radix_table[0]);
20330 if(aret.ends_with(_fractional_sign))
20337 const auto first_char_index = mod(num,_radix);
20339 aret.push_front(_radix_table[(
size_t)first_char_index]);
20344 template<
typename T>
20345 inline bool to_string_special_value_check(T num,
string&str,
bool is_negative)
const noexcept{
20346 if constexpr(::std::numeric_limits<T>::has_signaling_NaN || ::std::numeric_limits<T>::has_quiet_NaN){
20347 if(::std::isnan(num)){
20348 if constexpr(::std::numeric_limits<T>::has_signaling_NaN){
20349 constexpr auto signaling_NaN = ::std::numeric_limits<T>::signaling_NaN();
20350 if(full_equal_in_byte(signaling_NaN,num)){
20351 str=_signaling_nan;
20354 auto negative_signaling_NaN = copy_as_negative(signaling_NaN);
20355 if(full_equal_in_byte(negative_signaling_NaN,num)){
20356 str=_negative_sign+_signaling_nan;
20360 if constexpr(::std::numeric_limits<T>::has_quiet_NaN){
20361 constexpr auto quiet_NaN = ::std::numeric_limits<T>::quiet_NaN();
20362 if(full_equal_in_byte(quiet_NaN,num)){
20366 auto negative_quiet_NaN = copy_as_negative(quiet_NaN);
20367 if(full_equal_in_byte(negative_quiet_NaN,num)){
20368 str=_negative_sign+_quiet_nan;
20372 str=_nan+_unknown_data_start_sign;
20373 data_view<T> view{&num};
20374 for(
const byte c: view){
20375 str += to_string_rough((
unsigned char)c);
20376 str += _unknown_data_split_sign;
20378 str.back() = _unknown_data_end_sign;
20382 if constexpr(::std::numeric_limits<T>::has_infinity){
20383 if(::std::isinf(num)){
20384 if constexpr(!::std::is_unsigned_v<T>)
20386 str=_negative_sign+_inf;
20395 template<
typename T> requires ::std::is_arithmetic_v<T>
20396 inline string to_string_rough_no_special_value_check(T num)
const noexcept{
20398 const bool is_negative=magic_number::is_negative(num);
20399 typedef decltype(
lambda{
20400 if constexpr(::std::is_unsigned_v<T>||::std::is_floating_point_v<T>)
20403 return::std::make_unsigned_t<T>();
20407 if constexpr(!::std::is_unsigned_v<T>)
20409 aret=_negative_sign;
20412 aret+=to_string_num_base(unum);
20416 template<
typename T> requires ::std::is_arithmetic_v<T>
20417 inline string to_string_rough(T num)
const noexcept{
20419 const bool is_negative=magic_number::is_negative(num);
20420 if(to_string_special_value_check(num,aret,is_negative))
20422 return to_string_rough_no_special_value_check(num);
20425 template<
typename T>
20426 inline T from_string_get_num_base(
string str)
const noexcept{
20427 if constexpr(::std::is_floating_point_v<T>){
20428 size_t order_of_magnitude = str.size();
20430 size_t i=str.size();
20433 const size_t index=_radix_table.find(str[i]);
20434 if(index==string::npos){
20435 if(str[i] == _fractional_sign){
20436 order_of_magnitude=i;
20444 aret*=pow(_radix, order_of_magnitude);
20449 for(
size_t i = 0; i < str.size(); i++){
20450 const size_t index = _radix_table.find(str[i]);
20451 if(index == string::npos)
20459 template<
typename T>
20460 inline bool from_string_special_value_check(
string str,T& num,
bool is_negative)
const noexcept{
20461 if constexpr(::std::numeric_limits<T>::has_signaling_NaN || ::std::numeric_limits<T>::has_quiet_NaN){
20462 if constexpr(::std::numeric_limits<T>::has_signaling_NaN)
20463 if(str==_signaling_nan){
20464 num= copy_as_negative(::std::numeric_limits<T>::signaling_NaN(),is_negative);
20467 if constexpr(::std::numeric_limits<T>::has_quiet_NaN)
20468 if(str==_quiet_nan){
20469 num= copy_as_negative(::std::numeric_limits<T>::quiet_NaN(),is_negative);
20472 if(str.starts_with(_nan+_unknown_data_start_sign)){
20473 str.pop_front(_nan.size()+1);
20476 data_block<T> block;
20477 size_t write_index = 0;
20479 const size_t dot_pos = str.find(_unknown_data_split_sign);
20480 auto byte_str = str.substr(0, dot_pos);
20481 block[write_index++] = (byte)from_string_get<unsigned char>(byte_str);
20482 if(dot_pos == string::npos)
20484 str = str.substr(dot_pos+1);
20486 num= data_cast<T>(block);
20490 if constexpr(::std::numeric_limits<T>::has_quiet_NaN)
20491 num= copy_as_negative(::std::numeric_limits<T>::quiet_NaN(),is_negative);
20493 num= copy_as_negative(::std::numeric_limits<T>::signaling_NaN(),is_negative);
20497 if constexpr(::std::numeric_limits<T>::has_infinity){
20500 return copy_as_negative(::std::numeric_limits<T>::infinity());
20502 return ::std::numeric_limits<T>::infinity();
20509 template<
typename T> requires ::std::is_arithmetic_v<T>
20510 inline T from_string_get(
string str)
const noexcept{
20512 if constexpr(::std::is_floating_point_v<T>){
20513 const auto info_tail_size=get_info_tail_size<T>();
20514 if(str.size()>info_tail_size){
20515 const auto tail_pos=str.size()-info_tail_size;
20516 auto info_tail=str.substr(tail_pos);
20517 auto str_with_out_tail=str.substr(0,tail_pos);
20518 if(str_with_out_tail.back()==_fractional_sign)
20519 str_with_out_tail.pop_back();
20520 auto num=get_from_info_tail<T>(info_tail);
20521 if(to_string_rough(num)==str_with_out_tail)
20523 str_with_out_tail+=
string{info_tail.size(),_radix_table[0]};
20524 if(to_string_rough(num)==str_with_out_tail)
20530 bool is_negative=
false;
20531 if constexpr(!::std::is_unsigned_v<T>)
20532 if(str[0]==_negative_sign){
20536 if(str[0]==_positive_sign)
20538 if(from_string_special_value_check(str,num,is_negative))
20540 typedef decltype(
lambda{
20541 if constexpr(::std::is_unsigned_v<T>||::std::is_floating_point_v<T>)
20544 return::std::make_unsigned_t<T>();
20546 UT unum=from_string_get_num_base<UT>(str);
20547 return copy_as_negative<T>(unum,is_negative);
20549 template<
typename T> requires ::std::is_arithmetic_v<T>
20550 inline string to_string(T num)
const noexcept{
20552 if(to_string_special_value_check(num,aret,is_negative(num)))
20554 aret=to_string_rough_no_special_value_check(num);
20555 if constexpr(::std::is_floating_point_v<T>){
20557 auto rounding_up_char =
lambda_with_catch(&) (string::arec_t char_arc)
noexcept{
20558 const char_t up_char = move(char_arc);
20559 size_t up_pos = _radix_table.find(up_char);
20561 if(up_pos == _radix)
20563 move(char_arc) = _radix_table[up_pos];
20564 return up_pos == 0;
20567 size_t i = str.size();
20569 if(rounding_up_char(str[i])){
20571 if(str[i] == _fractional_sign)
20575 str.push_front(_radix_table[1]);
20582 size_t dot_pos=aret.find(_fractional_sign);
20584 if(from_string_get<T>(aret) != num){
20586 string info_tail=get_info_tail(num);
20587 if(dot_pos==string::npos){
20588 if(aret.ends_with(
string{info_tail.size(),_radix_table[0]}))
20589 aret.pop_back(info_tail.size());
20591 aret.push_back(_fractional_sign);
20598 size_t left_pos = 0;
20599 size_t right_pos = aret.size();
20600 string better_aret,better_aret_last;
20601 if(dot_pos==string::npos)
20602 dot_pos=aret.size();
20604 size_t step_pos = (left_pos + right_pos) / 2;
20605 better_aret = aret.substr(0, step_pos);
20606 if(step_pos==dot_pos)
20609 const char_t cut_char = aret[step_pos];
20610 const size_t cut_num = _radix_table.find(cut_char);
20611 if(cut_num >= _radix / 2)
20612 rounding_up(better_aret);
20613 if(better_aret.size() < dot_pos)
20614 better_aret.resize(dot_pos,_radix_table[0]);
20616 if(from_string_get<T>(better_aret) == num){
20617 if(better_aret.back() == _radix_table[0]){
20618 const auto end_pos = max(better_aret.find_last_not_of(_radix_table[0])+1, dot_pos);
20619 better_aret.resize(end_pos);
20620 if(better_aret.back() == _fractional_sign)
20621 better_aret.pop_back();
20623 right_pos = min(better_aret.size(), step_pos);
20624 better_aret_last = better_aret;
20626 elseif(left_pos != step_pos)
20627 left_pos = step_pos;
20630 }
while(left_pos < right_pos);
20631 if(better_aret_last){
20632 aret = better_aret_last;
20633 if(aret.ends_with(_fractional_sign))
20642 distinctive inline numerical_representation_t trinary{3,
es"012"_constexpr_str};
20643 distinctive inline numerical_representation_t binary{2,
es"01"_constexpr_str};
20644 distinctive inline numerical_representation_t octal{8,
es"01234567"_constexpr_str};
20645 distinctive inline numerical_representation_t decimal{10,
es"0123456789"_constexpr_str};
20646 distinctive inline numerical_representation_t hexadecimal{16,
es"0123456789abcdef"_constexpr_str};
20647 distinctive inline numerical_representation_t hexadecimal_upper{16,
es"0123456789ABCDEF"_constexpr_str};
20651 template<
typename T> requires ::std::is_arithmetic_v<T>
20652 inline T from_string_get(
const string&str,
const numerical_representation_t&radix=decimal)
noexcept{
20653 return radix.from_string_get<T>(str);
20656 template<
typename T> requires ::std::is_arithmetic_v<T>
20657 inline string to_string_rough(T num,
const numerical_representation_t&radix=decimal)
noexcept{
20658 return radix.to_string_rough(num);
20661 template<
typename T> requires ::std::is_arithmetic_v<T>
20662 inline string to_string(T num,
const numerical_representation_t&radix=decimal)
noexcept{
20663 return radix.to_string(num);
20668 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20669 #if defined(ELC_TEST_ON)
20670 namespace numerical_representation_part_test{
20671 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_test.hpp"
20679 inline void test(){
20682 inline void test_log_out(){
20684 inline void test_end(){
20689 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20693 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
20701 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
20712 #if defined(_MSC_VER)
20713 #pragma warning(pop)
20715 #undef suppress_msvc_warning
20716 #undef disable_msvc_warning
20717 #undef push_msvc_warning
20718 #undef pop_msvc_warning
20719 #undef push_and_disable_msvc_warning
20722 #undef BIT_POSSIBILITY
20724 #if defined(ELC_VOID_NAME)
20725 #define void the_void
20730 #undef noexcept_as_auto
20731 #undef constexpr_as
20732 #undef constexpr_as_auto
20734 #undef using_method_from_base_t
20735 #undef using_method_from_value
20740 #undef re_declvalue
20745 #undef template_error
20746 #undef template_warning
20748 #undef type_info_of
20749 #undef type_name_of
20751 #undef is_common_attribute
20752 #undef is_special_attribute
20754 #undef has_attribute
20755 #undef not_has_attribute
20757 #undef float_size_of
20760 #undef def_common_attribute_with_nothing
20761 #undef def_special_attribute_with_nothing
20763 #undef common_attribute_t
20764 #undef special_attribute_t
20767 #undef enabled_by_default
20768 #undef disabled_by_default
20769 #undef enable_if_not_ill_form
20772 #undef was_an_ill_form
20773 #undef was_an_ill_form_with_parameter
20774 #undef was_not_an_ill_form
20775 #undef was_not_an_ill_form_and_noexcept
20776 #undef was_not_an_ill_form_with_parameter
20778 #undef recursive_lambda
20779 #undef get_recursive_lambda_caller
20781 #undef lambda_with_catch
20782 #undef self_recursion
20783 #undef lambda_RLSRRS
20791 #undef _small_than_
20793 #if defined(_MSC_VER)
20799 #undef INTER_NAMESPACE
20800 #undef BREAK_NAMESPACE
20805 #undef template_name
20808 #undef not_in_debug
20813 #undef ELC_TEST_EVENTNAME
20815 #undef override_instance_struct
20819 #undef force_inline
20821 #undef with_no_vtable
20823 #undef in_consteval
20825 #undef no_vtable_struct
20826 #undef no_vtable_class
20830 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
20834 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20837 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_export.hpp"
20846 #define export using defs::
20854 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/numerical_representation/_body.hpp"
20859 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
20864 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
20866 #error ERROR_MSG_UNABLE_OS
20869 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20881 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20883 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
20894 #define BIT_POSSIBILITY 2
20898 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
20900 #if defined(_MSC_VER)
20901 #pragma warning(push,ELC_WARNING_LEVEL)
20902 #pragma warning(disable:4099)
20903 #pragma warning(disable:26812)
20904 #pragma warning(disable:4584)
20905 #pragma warning(disable:4250)
20906 #pragma warning(disable:26432)
20907 #pragma warning(disable:26435)
20908 #pragma warning(disable:26481)
20909 #pragma warning(disable:26446)
20910 #pragma warning(disable:26434)
20911 #pragma warning(disable:26429)
20912 #pragma warning(disable:26471)
20913 #pragma warning(disable:26474)
20914 #pragma warning(disable:26473)
20915 #pragma warning(disable:26456)
20916 #pragma warning(disable:26485)
20917 #pragma warning(disable:26490)
20918 #pragma warning(disable:26472)
20919 #pragma warning(disable:26482)
20920 #pragma warning(disable:26493)
20922 #if defined(_MSC_VER)
20923 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
20924 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
20925 #define push_msvc_warning() __pragma(warning(push))
20926 #define pop_msvc_warning() __pragma(warning(pop))
20927 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
20929 #define suppress_msvc_warning(...)
20930 #define disable_msvc_warning(...)
20931 #define push_msvc_warning()
20932 #define pop_msvc_warning()
20933 #define push_and_disable_msvc_warning(...)
20936 #if defined(ELC_VOID_NAME)
20941 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
20942 #define noexcept_as_auto MAGIC
20943 #define constexpr_as(...) MAGIC constexpr
20944 #define constexpr_as_auto MAGIC MAGIC constexpr
20946 #define using_method_from_base_t(name,...) \
20947 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
20948 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
20950 return base_t::name(forward<Args>(rest)...);\
20953 #define using_method_from_value(name,value_name,...) \
20954 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
20955 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
20957 return value_name.name(forward<Args>(rest)...);\
20960 #define floop while(__builtin_is_my_dick_still_there())
20961 #define enable_adl(name) void name()noexcept=delete
20963 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
20964 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
20966 #define declvalue(...) (::std::declval<__VA_ARGS__>())
20969 #define template_error(reason) static_assert(template_error_helper<T>,reason)
20971 #define template_warning(reason) template_warning_helper<T>(reason)
20974 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
20975 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
20977 #define is_common_attribute(name) public attribute<T,name<T>>
20978 #define is_special_attribute(name) public attribute<T,name>
20980 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
20981 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
20984 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
20986 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
20989 #define def_common_attribute_with_nothing(name) \
20990 template<typename T>\
20993 #define def_special_attribute_with_nothing(name) \
20996 #define common_attribute_t template<class>class
20997 #define special_attribute_t class
21007 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
21009 #define enabled_by_default class enable_state=void
21011 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
21013 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
21015 #define enable_flag class enable_state
21017 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
21018 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
21019 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
21020 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
21021 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
21024 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
21026 #define get_recursive_lambda_caller(name) \
21027 lambda_with_catch(&)(auto&&...Args){\
21028 return name(name,Args...);\
21033 #define lambda_with_catch(...) [__VA_ARGS__]
21035 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
21037 #define lambda_RLSRRS _my_jb_super_sb_name_
21045 #define elseif else if
21047 #define _big_than_ >
21049 #define _small_than_ <
21051 #if defined(_MSC_VER)
21058 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
21060 #define BREAK_NAMESPACE }
21063 #define template_name template
21065 #define type_name class
21067 #if defined(DEBUG) || defined(_DEBUG)
21068 #define not_in_debug 0
21070 #define not_in_debug 1
21074 #define ec(ch) U ## ch
21076 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
21077 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
21079 #define ELC_TEST_EVENTNAME(name)
21082 #define override_instance_struct \
21084 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
21085 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
21086 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
21087 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
21088 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
21090 #if defined(_WIN32)
21091 #define distinctive __declspec(dllexport)
21093 #define distinctive
21096 #if defined(_WIN32)
21097 #define force_inline __forceinline
21098 #elif defined(__GNUC__)
21099 #define force_inline __attribute__((always_inline)) inline
21101 #define force_inline inline
21104 #if defined(_WIN32)
21105 #define with_no_vtable __declspec(novtable)
21107 #define with_no_vtable
21110 #define in_consteval (::std::is_constant_evaluated())
21112 #define no_vtable_struct struct with_no_vtable
21113 #define no_vtable_class class with_no_vtable
21117 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21122 #if SYSTEM_TYPE == linux
21124 #elif SYSTEM_TYPE == windows
21132 #if SYSTEM_TYPE == linux
21133 dlopen(file_name,RTLD_LAZY)
21134 #elif SYSTEM_TYPE == windows
21135 LoadLibraryA((LPCSTR)file_name)
21141 #if SYSTEM_TYPE == linux
21142 to_char_t_str(dlerror());
21143 #elif SYSTEM_TYPE == windows
21144 es"ERROR CODE:"_constexpr_str+to_string((DWORD)GetLastError());
21149 #if SYSTEM_TYPE == linux
21151 #elif SYSTEM_TYPE == windows
21152 FreeLibrary(handle)
21156 [[nodiscard]]
inline void*
base_get_symbol(library_handle handle,
const char*symbol_name)
noexcept{
21159 #if SYSTEM_TYPE == linux
21160 dlsym(handle,symbol_name)
21161 #elif SYSTEM_TYPE == windows
21162 (
void*)GetProcAddress(handle,(LPCSTR)symbol_name)
21177 [[nodiscard]]
inline void*
get_symbol(library_handle handle,
string symbol_name)
noexcept{
21182 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
21193 #if defined(_MSC_VER)
21194 #pragma warning(pop)
21196 #undef suppress_msvc_warning
21197 #undef disable_msvc_warning
21198 #undef push_msvc_warning
21199 #undef pop_msvc_warning
21200 #undef push_and_disable_msvc_warning
21203 #undef BIT_POSSIBILITY
21205 #if defined(ELC_VOID_NAME)
21206 #define void the_void
21211 #undef noexcept_as_auto
21212 #undef constexpr_as
21213 #undef constexpr_as_auto
21215 #undef using_method_from_base_t
21216 #undef using_method_from_value
21221 #undef re_declvalue
21226 #undef template_error
21227 #undef template_warning
21229 #undef type_info_of
21230 #undef type_name_of
21232 #undef is_common_attribute
21233 #undef is_special_attribute
21235 #undef has_attribute
21236 #undef not_has_attribute
21238 #undef float_size_of
21241 #undef def_common_attribute_with_nothing
21242 #undef def_special_attribute_with_nothing
21244 #undef common_attribute_t
21245 #undef special_attribute_t
21248 #undef enabled_by_default
21249 #undef disabled_by_default
21250 #undef enable_if_not_ill_form
21253 #undef was_an_ill_form
21254 #undef was_an_ill_form_with_parameter
21255 #undef was_not_an_ill_form
21256 #undef was_not_an_ill_form_and_noexcept
21257 #undef was_not_an_ill_form_with_parameter
21259 #undef recursive_lambda
21260 #undef get_recursive_lambda_caller
21262 #undef lambda_with_catch
21263 #undef self_recursion
21264 #undef lambda_RLSRRS
21272 #undef _small_than_
21274 #if defined(_MSC_VER)
21280 #undef INTER_NAMESPACE
21281 #undef BREAK_NAMESPACE
21286 #undef template_name
21289 #undef not_in_debug
21294 #undef ELC_TEST_EVENTNAME
21296 #undef override_instance_struct
21300 #undef force_inline
21302 #undef with_no_vtable
21304 #undef in_consteval
21306 #undef no_vtable_struct
21307 #undef no_vtable_class
21311 #line 94 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21313 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
21326 #undef ERROR_MSG_UNABLE_OS
21330 #line 96 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/library_load.hpp"
21335 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21338 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
21351 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
21355 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21357 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
21365 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21377 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21379 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
21390 #define BIT_POSSIBILITY 2
21394 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21396 #if defined(_MSC_VER)
21397 #pragma warning(push,ELC_WARNING_LEVEL)
21398 #pragma warning(disable:4099)
21399 #pragma warning(disable:26812)
21400 #pragma warning(disable:4584)
21401 #pragma warning(disable:4250)
21402 #pragma warning(disable:26432)
21403 #pragma warning(disable:26435)
21404 #pragma warning(disable:26481)
21405 #pragma warning(disable:26446)
21406 #pragma warning(disable:26434)
21407 #pragma warning(disable:26429)
21408 #pragma warning(disable:26471)
21409 #pragma warning(disable:26474)
21410 #pragma warning(disable:26473)
21411 #pragma warning(disable:26456)
21412 #pragma warning(disable:26485)
21413 #pragma warning(disable:26490)
21414 #pragma warning(disable:26472)
21415 #pragma warning(disable:26482)
21416 #pragma warning(disable:26493)
21418 #if defined(_MSC_VER)
21419 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
21420 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
21421 #define push_msvc_warning() __pragma(warning(push))
21422 #define pop_msvc_warning() __pragma(warning(pop))
21423 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
21425 #define suppress_msvc_warning(...)
21426 #define disable_msvc_warning(...)
21427 #define push_msvc_warning()
21428 #define pop_msvc_warning()
21429 #define push_and_disable_msvc_warning(...)
21432 #if defined(ELC_VOID_NAME)
21437 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
21438 #define noexcept_as_auto MAGIC
21439 #define constexpr_as(...) MAGIC constexpr
21440 #define constexpr_as_auto MAGIC MAGIC constexpr
21442 #define using_method_from_base_t(name,...) \
21443 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
21444 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
21446 return base_t::name(forward<Args>(rest)...);\
21449 #define using_method_from_value(name,value_name,...) \
21450 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
21451 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
21453 return value_name.name(forward<Args>(rest)...);\
21456 #define floop while(__builtin_is_my_dick_still_there())
21457 #define enable_adl(name) void name()noexcept=delete
21459 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
21460 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
21462 #define declvalue(...) (::std::declval<__VA_ARGS__>())
21465 #define template_error(reason) static_assert(template_error_helper<T>,reason)
21467 #define template_warning(reason) template_warning_helper<T>(reason)
21470 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
21471 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
21473 #define is_common_attribute(name) public attribute<T,name<T>>
21474 #define is_special_attribute(name) public attribute<T,name>
21476 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
21477 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
21480 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
21482 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
21485 #define def_common_attribute_with_nothing(name) \
21486 template<typename T>\
21489 #define def_special_attribute_with_nothing(name) \
21492 #define common_attribute_t template<class>class
21493 #define special_attribute_t class
21503 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
21505 #define enabled_by_default class enable_state=void
21507 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
21509 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
21511 #define enable_flag class enable_state
21513 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
21514 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
21515 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
21516 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
21517 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
21520 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
21522 #define get_recursive_lambda_caller(name) \
21523 lambda_with_catch(&)(auto&&...Args){\
21524 return name(name,Args...);\
21529 #define lambda_with_catch(...) [__VA_ARGS__]
21531 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
21533 #define lambda_RLSRRS _my_jb_super_sb_name_
21541 #define elseif else if
21543 #define _big_than_ >
21545 #define _small_than_ <
21547 #if defined(_MSC_VER)
21554 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
21556 #define BREAK_NAMESPACE }
21559 #define template_name template
21561 #define type_name class
21563 #if defined(DEBUG) || defined(_DEBUG)
21564 #define not_in_debug 0
21566 #define not_in_debug 1
21570 #define ec(ch) U ## ch
21572 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
21573 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
21575 #define ELC_TEST_EVENTNAME(name)
21578 #define override_instance_struct \
21580 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
21581 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
21582 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
21583 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
21584 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
21586 #if defined(_WIN32)
21587 #define distinctive __declspec(dllexport)
21589 #define distinctive
21592 #if defined(_WIN32)
21593 #define force_inline __forceinline
21594 #elif defined(__GNUC__)
21595 #define force_inline __attribute__((always_inline)) inline
21597 #define force_inline inline
21600 #if defined(_WIN32)
21601 #define with_no_vtable __declspec(novtable)
21603 #define with_no_vtable
21606 #define in_consteval (::std::is_constant_evaluated())
21608 #define no_vtable_struct struct with_no_vtable
21609 #define no_vtable_class class with_no_vtable
21613 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
21617 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21619 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/lib_loader.hpp"
21628 namespace lib_loader_n{
21642 _m=library_handle{0};
21643 _error=locale::str::lib_load::null_lib;
21644 attribute_ptr_cast<ref_able>(
this)->init_never_ref_num_zero();
21648 _m=load_library(lib_name);
21651 _error=get_load_error();
21656 [[nodiscard]]
explicit operator bool()const noexcept{
21667 return APIs::library_load::get_symbol(
_m,symbol_name);
21669 template<
class symbol_t>
21671 return*
reinterpret_cast<symbol_t*
>(get_symbol(symbol_name));
21673 template<
class Func_t>
21674 [[nodiscard]]function_t<Func_t>get_symbol_as_function(
string symbol_name)
noexcept;
21677 return a->operator bool();
21696 template<
class Func_t>
21698 #if !defined(_MSC_VER)
21699 template<
class Ret_t,
class...Args_t,
bool nothrow>
21706 template<
class Ret_t,
class...Args_t>
21708 symbol_t(library_handle_t lib,
string symbol_name,Ret_t(*self)(Args_t...))noexcept:
21711 template<
class Ret_t,
class...Args_t>
21712 struct symbol_t<Ret_t(Args_t...)noexcept>:function_data_warpper_t<Ret_t(*)(Args_t...)noexcept>,base_symbol_t{
21713 symbol_t(library_handle_t lib,
string symbol_name,Ret_t(*self)(Args_t...)noexcept)noexcept:
21714 function_data_warpper_t<Ret_t(*)(Args_t...)noexcept>(self),base_symbol_t(lib,symbol_name){}
21718 template<
class Func_t>
21719 [[nodiscard]]
inline function_t<Func_t>library_info_t::get_symbol_as_function(
string symbol_name)
noexcept{
21720 auto func_p=&get_symbol_as<Func_t>(symbol_name);
21728 return get<library_info_t>(lib_name);
21730 template<
class Func_t>
21733 if(symbol_info.fail())
21736 return symbol_info.get_ref()._lib;
21738 template<
class Func_t>
21741 if(symbol_info.fail())
21744 return symbol_info.get_ref().
_name;
21750 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21751 #if defined(ELC_TEST_ON)
21752 namespace lib_loader_part_test{
21753 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_test.hpp"
21761 inline void test(){
21764 inline void test_log_out(){}
21765 inline void test_end{}
21769 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21773 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
21781 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
21792 #if defined(_MSC_VER)
21793 #pragma warning(pop)
21795 #undef suppress_msvc_warning
21796 #undef disable_msvc_warning
21797 #undef push_msvc_warning
21798 #undef pop_msvc_warning
21799 #undef push_and_disable_msvc_warning
21802 #undef BIT_POSSIBILITY
21804 #if defined(ELC_VOID_NAME)
21805 #define void the_void
21810 #undef noexcept_as_auto
21811 #undef constexpr_as
21812 #undef constexpr_as_auto
21814 #undef using_method_from_base_t
21815 #undef using_method_from_value
21820 #undef re_declvalue
21825 #undef template_error
21826 #undef template_warning
21828 #undef type_info_of
21829 #undef type_name_of
21831 #undef is_common_attribute
21832 #undef is_special_attribute
21834 #undef has_attribute
21835 #undef not_has_attribute
21837 #undef float_size_of
21840 #undef def_common_attribute_with_nothing
21841 #undef def_special_attribute_with_nothing
21843 #undef common_attribute_t
21844 #undef special_attribute_t
21847 #undef enabled_by_default
21848 #undef disabled_by_default
21849 #undef enable_if_not_ill_form
21852 #undef was_an_ill_form
21853 #undef was_an_ill_form_with_parameter
21854 #undef was_not_an_ill_form
21855 #undef was_not_an_ill_form_and_noexcept
21856 #undef was_not_an_ill_form_with_parameter
21858 #undef recursive_lambda
21859 #undef get_recursive_lambda_caller
21861 #undef lambda_with_catch
21862 #undef self_recursion
21863 #undef lambda_RLSRRS
21871 #undef _small_than_
21873 #if defined(_MSC_VER)
21879 #undef INTER_NAMESPACE
21880 #undef BREAK_NAMESPACE
21885 #undef template_name
21888 #undef not_in_debug
21893 #undef ELC_TEST_EVENTNAME
21895 #undef override_instance_struct
21899 #undef force_inline
21901 #undef with_no_vtable
21903 #undef in_consteval
21905 #undef no_vtable_struct
21906 #undef no_vtable_class
21910 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
21914 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21917 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_export.hpp"
21926 #define export using defs::lib_loader_n::
21935 #line 30 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/lib_loader/_body.hpp"
21940 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
21945 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
21946 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/literal"
21955 #if !defined(ELC_LITERAL)
21956 #define ELC_LITERAL
21957 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
21966 #if defined(ELC_TEST)
21967 #error "this part cannot be tested."
21970 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
21978 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21990 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
21992 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
22003 #define BIT_POSSIBILITY 2
22007 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22009 #if defined(_MSC_VER)
22010 #pragma warning(push,ELC_WARNING_LEVEL)
22011 #pragma warning(disable:4099)
22012 #pragma warning(disable:26812)
22013 #pragma warning(disable:4584)
22014 #pragma warning(disable:4250)
22015 #pragma warning(disable:26432)
22016 #pragma warning(disable:26435)
22017 #pragma warning(disable:26481)
22018 #pragma warning(disable:26446)
22019 #pragma warning(disable:26434)
22020 #pragma warning(disable:26429)
22021 #pragma warning(disable:26471)
22022 #pragma warning(disable:26474)
22023 #pragma warning(disable:26473)
22024 #pragma warning(disable:26456)
22025 #pragma warning(disable:26485)
22026 #pragma warning(disable:26490)
22027 #pragma warning(disable:26472)
22028 #pragma warning(disable:26482)
22029 #pragma warning(disable:26493)
22031 #if defined(_MSC_VER)
22032 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
22033 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
22034 #define push_msvc_warning() __pragma(warning(push))
22035 #define pop_msvc_warning() __pragma(warning(pop))
22036 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
22038 #define suppress_msvc_warning(...)
22039 #define disable_msvc_warning(...)
22040 #define push_msvc_warning()
22041 #define pop_msvc_warning()
22042 #define push_and_disable_msvc_warning(...)
22045 #if defined(ELC_VOID_NAME)
22050 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
22051 #define noexcept_as_auto MAGIC
22052 #define constexpr_as(...) MAGIC constexpr
22053 #define constexpr_as_auto MAGIC MAGIC constexpr
22055 #define using_method_from_base_t(name,...) \
22056 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
22057 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
22059 return base_t::name(forward<Args>(rest)...);\
22062 #define using_method_from_value(name,value_name,...) \
22063 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
22064 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
22066 return value_name.name(forward<Args>(rest)...);\
22069 #define floop while(__builtin_is_my_dick_still_there())
22070 #define enable_adl(name) void name()noexcept=delete
22072 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
22073 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
22075 #define declvalue(...) (::std::declval<__VA_ARGS__>())
22078 #define template_error(reason) static_assert(template_error_helper<T>,reason)
22080 #define template_warning(reason) template_warning_helper<T>(reason)
22083 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
22084 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
22086 #define is_common_attribute(name) public attribute<T,name<T>>
22087 #define is_special_attribute(name) public attribute<T,name>
22089 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
22090 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
22093 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
22095 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
22098 #define def_common_attribute_with_nothing(name) \
22099 template<typename T>\
22102 #define def_special_attribute_with_nothing(name) \
22105 #define common_attribute_t template<class>class
22106 #define special_attribute_t class
22116 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
22118 #define enabled_by_default class enable_state=void
22120 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
22122 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
22124 #define enable_flag class enable_state
22126 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
22127 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
22128 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
22129 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
22130 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
22133 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
22135 #define get_recursive_lambda_caller(name) \
22136 lambda_with_catch(&)(auto&&...Args){\
22137 return name(name,Args...);\
22142 #define lambda_with_catch(...) [__VA_ARGS__]
22144 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
22146 #define lambda_RLSRRS _my_jb_super_sb_name_
22154 #define elseif else if
22156 #define _big_than_ >
22158 #define _small_than_ <
22160 #if defined(_MSC_VER)
22167 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
22169 #define BREAK_NAMESPACE }
22172 #define template_name template
22174 #define type_name class
22176 #if defined(DEBUG) || defined(_DEBUG)
22177 #define not_in_debug 0
22179 #define not_in_debug 1
22183 #define ec(ch) U ## ch
22185 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
22186 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
22188 #define ELC_TEST_EVENTNAME(name)
22191 #define override_instance_struct \
22193 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
22194 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
22195 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
22196 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
22197 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
22199 #if defined(_WIN32)
22200 #define distinctive __declspec(dllexport)
22202 #define distinctive
22205 #if defined(_WIN32)
22206 #define force_inline __forceinline
22207 #elif defined(__GNUC__)
22208 #define force_inline __attribute__((always_inline)) inline
22210 #define force_inline inline
22213 #if defined(_WIN32)
22214 #define with_no_vtable __declspec(novtable)
22216 #define with_no_vtable
22219 #define in_consteval (::std::is_constant_evaluated())
22221 #define no_vtable_struct struct with_no_vtable
22222 #define no_vtable_class class with_no_vtable
22226 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22230 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22232 #if defined(ELC_TEST_ON)
22233 namespace literal_part_test{
22234 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_test.hpp"
22242 inline void test(){
22245 inline void test_log_out(){
22247 inline void test_end{
22252 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22256 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22264 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
22275 #if defined(_MSC_VER)
22276 #pragma warning(pop)
22278 #undef suppress_msvc_warning
22279 #undef disable_msvc_warning
22280 #undef push_msvc_warning
22281 #undef pop_msvc_warning
22282 #undef push_and_disable_msvc_warning
22285 #undef BIT_POSSIBILITY
22287 #if defined(ELC_VOID_NAME)
22288 #define void the_void
22293 #undef noexcept_as_auto
22294 #undef constexpr_as
22295 #undef constexpr_as_auto
22297 #undef using_method_from_base_t
22298 #undef using_method_from_value
22303 #undef re_declvalue
22308 #undef template_error
22309 #undef template_warning
22311 #undef type_info_of
22312 #undef type_name_of
22314 #undef is_common_attribute
22315 #undef is_special_attribute
22317 #undef has_attribute
22318 #undef not_has_attribute
22320 #undef float_size_of
22323 #undef def_common_attribute_with_nothing
22324 #undef def_special_attribute_with_nothing
22326 #undef common_attribute_t
22327 #undef special_attribute_t
22330 #undef enabled_by_default
22331 #undef disabled_by_default
22332 #undef enable_if_not_ill_form
22335 #undef was_an_ill_form
22336 #undef was_an_ill_form_with_parameter
22337 #undef was_not_an_ill_form
22338 #undef was_not_an_ill_form_and_noexcept
22339 #undef was_not_an_ill_form_with_parameter
22341 #undef recursive_lambda
22342 #undef get_recursive_lambda_caller
22344 #undef lambda_with_catch
22345 #undef self_recursion
22346 #undef lambda_RLSRRS
22354 #undef _small_than_
22356 #if defined(_MSC_VER)
22362 #undef INTER_NAMESPACE
22363 #undef BREAK_NAMESPACE
22368 #undef template_name
22371 #undef not_in_debug
22376 #undef ELC_TEST_EVENTNAME
22378 #undef override_instance_struct
22382 #undef force_inline
22384 #undef with_no_vtable
22386 #undef in_consteval
22388 #undef no_vtable_struct
22389 #undef no_vtable_class
22393 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22397 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22400 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_export.hpp"
22409 #define export using ::
22414 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/literal/_body.hpp"
22419 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/literal"
22424 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
22426 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/memory_stream"
22435 #if !defined(ELC_MEMORY_STREAM)
22436 #define ELC_MEMORY_STREAM
22437 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22446 #if defined(ELC_TEST)
22447 #error "this part cannot be tested."
22450 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22458 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22470 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22472 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
22483 #define BIT_POSSIBILITY 2
22487 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
22489 #if defined(_MSC_VER)
22490 #pragma warning(push,ELC_WARNING_LEVEL)
22491 #pragma warning(disable:4099)
22492 #pragma warning(disable:26812)
22493 #pragma warning(disable:4584)
22494 #pragma warning(disable:4250)
22495 #pragma warning(disable:26432)
22496 #pragma warning(disable:26435)
22497 #pragma warning(disable:26481)
22498 #pragma warning(disable:26446)
22499 #pragma warning(disable:26434)
22500 #pragma warning(disable:26429)
22501 #pragma warning(disable:26471)
22502 #pragma warning(disable:26474)
22503 #pragma warning(disable:26473)
22504 #pragma warning(disable:26456)
22505 #pragma warning(disable:26485)
22506 #pragma warning(disable:26490)
22507 #pragma warning(disable:26472)
22508 #pragma warning(disable:26482)
22509 #pragma warning(disable:26493)
22511 #if defined(_MSC_VER)
22512 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
22513 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
22514 #define push_msvc_warning() __pragma(warning(push))
22515 #define pop_msvc_warning() __pragma(warning(pop))
22516 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
22518 #define suppress_msvc_warning(...)
22519 #define disable_msvc_warning(...)
22520 #define push_msvc_warning()
22521 #define pop_msvc_warning()
22522 #define push_and_disable_msvc_warning(...)
22525 #if defined(ELC_VOID_NAME)
22530 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
22531 #define noexcept_as_auto MAGIC
22532 #define constexpr_as(...) MAGIC constexpr
22533 #define constexpr_as_auto MAGIC MAGIC constexpr
22535 #define using_method_from_base_t(name,...) \
22536 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
22537 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
22539 return base_t::name(forward<Args>(rest)...);\
22542 #define using_method_from_value(name,value_name,...) \
22543 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
22544 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
22546 return value_name.name(forward<Args>(rest)...);\
22549 #define floop while(__builtin_is_my_dick_still_there())
22550 #define enable_adl(name) void name()noexcept=delete
22552 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
22553 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
22555 #define declvalue(...) (::std::declval<__VA_ARGS__>())
22558 #define template_error(reason) static_assert(template_error_helper<T>,reason)
22560 #define template_warning(reason) template_warning_helper<T>(reason)
22563 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
22564 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
22566 #define is_common_attribute(name) public attribute<T,name<T>>
22567 #define is_special_attribute(name) public attribute<T,name>
22569 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
22570 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
22573 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
22575 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
22578 #define def_common_attribute_with_nothing(name) \
22579 template<typename T>\
22582 #define def_special_attribute_with_nothing(name) \
22585 #define common_attribute_t template<class>class
22586 #define special_attribute_t class
22596 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
22598 #define enabled_by_default class enable_state=void
22600 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
22602 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
22604 #define enable_flag class enable_state
22606 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
22607 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
22608 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
22609 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
22610 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
22613 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
22615 #define get_recursive_lambda_caller(name) \
22616 lambda_with_catch(&)(auto&&...Args){\
22617 return name(name,Args...);\
22622 #define lambda_with_catch(...) [__VA_ARGS__]
22624 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
22626 #define lambda_RLSRRS _my_jb_super_sb_name_
22634 #define elseif else if
22636 #define _big_than_ >
22638 #define _small_than_ <
22640 #if defined(_MSC_VER)
22647 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
22649 #define BREAK_NAMESPACE }
22652 #define template_name template
22654 #define type_name class
22656 #if defined(DEBUG) || defined(_DEBUG)
22657 #define not_in_debug 0
22659 #define not_in_debug 1
22663 #define ec(ch) U ## ch
22665 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
22666 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
22668 #define ELC_TEST_EVENTNAME(name)
22671 #define override_instance_struct \
22673 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
22674 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
22675 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
22676 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
22677 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
22679 #if defined(_WIN32)
22680 #define distinctive __declspec(dllexport)
22682 #define distinctive
22685 #if defined(_WIN32)
22686 #define force_inline __forceinline
22687 #elif defined(__GNUC__)
22688 #define force_inline __attribute__((always_inline)) inline
22690 #define force_inline inline
22693 #if defined(_WIN32)
22694 #define with_no_vtable __declspec(novtable)
22696 #define with_no_vtable
22699 #define in_consteval (::std::is_constant_evaluated())
22701 #define no_vtable_struct struct with_no_vtable
22702 #define no_vtable_class class with_no_vtable
22706 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
22710 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22712 namespace stream_n{
22713 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/memory_stream.hpp"
22727 _m = get<byte>[1024]();
22735 return get_size_of_get(
_m);
22743 _pos += (ptrdiff_t)offsize;
22753 _pos = ((
byte*)p)-
_m;
22766 virtual void write(
const byte*buf,
size_t size)
noexcept override{
22767 if(size>this->bufsize()-_pos)
22768 get_resize(
_m,get_next_gold_size_to_resize_for_array(_pos+size));
22769 ::std::memcpy(
_m+_pos,buf,size);
22773 virtual size_t read(
byte*buf,
size_t size)
noexcept override{
22776 ::std::memcpy(buf,
_m+_pos,size);
22784 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22787 #if defined(ELC_TEST_ON)
22788 namespace memory_stream_part_test{
22789 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_test.hpp"
22797 inline void test(){
22800 inline void test_log_out(){
22802 inline void test_end(){
22807 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22811 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22819 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
22830 #if defined(_MSC_VER)
22831 #pragma warning(pop)
22833 #undef suppress_msvc_warning
22834 #undef disable_msvc_warning
22835 #undef push_msvc_warning
22836 #undef pop_msvc_warning
22837 #undef push_and_disable_msvc_warning
22840 #undef BIT_POSSIBILITY
22842 #if defined(ELC_VOID_NAME)
22843 #define void the_void
22848 #undef noexcept_as_auto
22849 #undef constexpr_as
22850 #undef constexpr_as_auto
22852 #undef using_method_from_base_t
22853 #undef using_method_from_value
22858 #undef re_declvalue
22863 #undef template_error
22864 #undef template_warning
22866 #undef type_info_of
22867 #undef type_name_of
22869 #undef is_common_attribute
22870 #undef is_special_attribute
22872 #undef has_attribute
22873 #undef not_has_attribute
22875 #undef float_size_of
22878 #undef def_common_attribute_with_nothing
22879 #undef def_special_attribute_with_nothing
22881 #undef common_attribute_t
22882 #undef special_attribute_t
22885 #undef enabled_by_default
22886 #undef disabled_by_default
22887 #undef enable_if_not_ill_form
22890 #undef was_an_ill_form
22891 #undef was_an_ill_form_with_parameter
22892 #undef was_not_an_ill_form
22893 #undef was_not_an_ill_form_and_noexcept
22894 #undef was_not_an_ill_form_with_parameter
22896 #undef recursive_lambda
22897 #undef get_recursive_lambda_caller
22899 #undef lambda_with_catch
22900 #undef self_recursion
22901 #undef lambda_RLSRRS
22909 #undef _small_than_
22911 #if defined(_MSC_VER)
22917 #undef INTER_NAMESPACE
22918 #undef BREAK_NAMESPACE
22923 #undef template_name
22926 #undef not_in_debug
22931 #undef ELC_TEST_EVENTNAME
22933 #undef override_instance_struct
22937 #undef force_inline
22939 #undef with_no_vtable
22941 #undef in_consteval
22943 #undef no_vtable_struct
22944 #undef no_vtable_class
22948 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
22952 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22955 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_export.hpp"
22964 #define export using defs::
22970 #line 28 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/memory_stream/_body.hpp"
22975 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/memory_stream"
22980 #line 20 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
22981 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
22990 #if !defined(ELC_NAMESPACE)
22991 #define ELC_NAMESPACE
22992 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23001 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23005 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23006 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23015 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23019 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23020 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23029 #if defined(ELC_TEST)
23030 #error "this part cannot be tested."
23033 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
23041 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23053 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23055 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
23066 #define BIT_POSSIBILITY 2
23070 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23072 #if defined(_MSC_VER)
23073 #pragma warning(push,ELC_WARNING_LEVEL)
23074 #pragma warning(disable:4099)
23075 #pragma warning(disable:26812)
23076 #pragma warning(disable:4584)
23077 #pragma warning(disable:4250)
23078 #pragma warning(disable:26432)
23079 #pragma warning(disable:26435)
23080 #pragma warning(disable:26481)
23081 #pragma warning(disable:26446)
23082 #pragma warning(disable:26434)
23083 #pragma warning(disable:26429)
23084 #pragma warning(disable:26471)
23085 #pragma warning(disable:26474)
23086 #pragma warning(disable:26473)
23087 #pragma warning(disable:26456)
23088 #pragma warning(disable:26485)
23089 #pragma warning(disable:26490)
23090 #pragma warning(disable:26472)
23091 #pragma warning(disable:26482)
23092 #pragma warning(disable:26493)
23094 #if defined(_MSC_VER)
23095 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
23096 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
23097 #define push_msvc_warning() __pragma(warning(push))
23098 #define pop_msvc_warning() __pragma(warning(pop))
23099 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
23101 #define suppress_msvc_warning(...)
23102 #define disable_msvc_warning(...)
23103 #define push_msvc_warning()
23104 #define pop_msvc_warning()
23105 #define push_and_disable_msvc_warning(...)
23108 #if defined(ELC_VOID_NAME)
23113 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
23114 #define noexcept_as_auto MAGIC
23115 #define constexpr_as(...) MAGIC constexpr
23116 #define constexpr_as_auto MAGIC MAGIC constexpr
23118 #define using_method_from_base_t(name,...) \
23119 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
23120 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
23122 return base_t::name(forward<Args>(rest)...);\
23125 #define using_method_from_value(name,value_name,...) \
23126 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
23127 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
23129 return value_name.name(forward<Args>(rest)...);\
23132 #define floop while(__builtin_is_my_dick_still_there())
23133 #define enable_adl(name) void name()noexcept=delete
23135 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
23136 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
23138 #define declvalue(...) (::std::declval<__VA_ARGS__>())
23141 #define template_error(reason) static_assert(template_error_helper<T>,reason)
23143 #define template_warning(reason) template_warning_helper<T>(reason)
23146 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
23147 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
23149 #define is_common_attribute(name) public attribute<T,name<T>>
23150 #define is_special_attribute(name) public attribute<T,name>
23152 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
23153 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
23156 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
23158 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
23161 #define def_common_attribute_with_nothing(name) \
23162 template<typename T>\
23165 #define def_special_attribute_with_nothing(name) \
23168 #define common_attribute_t template<class>class
23169 #define special_attribute_t class
23179 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
23181 #define enabled_by_default class enable_state=void
23183 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
23185 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
23187 #define enable_flag class enable_state
23189 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
23190 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
23191 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
23192 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
23193 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
23196 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
23198 #define get_recursive_lambda_caller(name) \
23199 lambda_with_catch(&)(auto&&...Args){\
23200 return name(name,Args...);\
23205 #define lambda_with_catch(...) [__VA_ARGS__]
23207 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
23209 #define lambda_RLSRRS _my_jb_super_sb_name_
23217 #define elseif else if
23219 #define _big_than_ >
23221 #define _small_than_ <
23223 #if defined(_MSC_VER)
23230 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
23232 #define BREAK_NAMESPACE }
23235 #define template_name template
23237 #define type_name class
23239 #if defined(DEBUG) || defined(_DEBUG)
23240 #define not_in_debug 0
23242 #define not_in_debug 1
23246 #define ec(ch) U ## ch
23248 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
23249 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
23251 #define ELC_TEST_EVENTNAME(name)
23254 #define override_instance_struct \
23256 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
23257 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
23258 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
23259 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
23260 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
23262 #if defined(_WIN32)
23263 #define distinctive __declspec(dllexport)
23265 #define distinctive
23268 #if defined(_WIN32)
23269 #define force_inline __forceinline
23270 #elif defined(__GNUC__)
23271 #define force_inline __attribute__((always_inline)) inline
23273 #define force_inline inline
23276 #if defined(_WIN32)
23277 #define with_no_vtable __declspec(novtable)
23279 #define with_no_vtable
23282 #define in_consteval (::std::is_constant_evaluated())
23284 #define no_vtable_struct struct with_no_vtable
23285 #define no_vtable_class class with_no_vtable
23289 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
23293 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23295 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/defs.hpp"
23305 distinctive inline map_t<ptr,string> long_term_binary_node_storager<string>{};
23307 namespace namespace_n{
23312 return (*thenamespace)[
es".symbol_type_map"];
23315 _namespace_root = get<common_node>();
23316 auto&nmsp = *_namespace_root;
23317 _namespace_now = &nmsp;
23320 nmsp[
es"."] = nmsp;
23322 nmsp[
es"nil"] = nil;
23324 value nmsptm = get_symbol_type_map(&nmsp);
23325 nmsptm = get<common_node>();
23326 nmsptm[
es"void"] =
es"void";
23330 ptr namespace_now_p = _namespace_now;
23331 while(namespace_now_p && !(*namespace_now_p)[index] && !get_symbol_type_map(namespace_now_p)[index])
23332 namespace_now_p = (*namespace_now_p)[
es".."];
23333 return namespace_now_p;
23337 auto nmsp=get_symbol_namespace(index);
23338 if((*nmsp)[index] || get_symbol_type_map(nmsp)[index])
23344 return (*get_symbol_namespace(index))[index];
23348 return get_symbol_type_map(get_symbol_namespace(index))[index];
23353 _namespace_now = get_symbol(namespace_name);
23363 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23365 #if defined(ELC_TEST_ON)
23366 namespace namespace_part_test{
23367 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_test.hpp"
23375 inline void test(){
23378 inline void test_log_out(){
23380 inline void test_end{
23385 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23389 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
23397 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
23408 #if defined(_MSC_VER)
23409 #pragma warning(pop)
23411 #undef suppress_msvc_warning
23412 #undef disable_msvc_warning
23413 #undef push_msvc_warning
23414 #undef pop_msvc_warning
23415 #undef push_and_disable_msvc_warning
23418 #undef BIT_POSSIBILITY
23420 #if defined(ELC_VOID_NAME)
23421 #define void the_void
23426 #undef noexcept_as_auto
23427 #undef constexpr_as
23428 #undef constexpr_as_auto
23430 #undef using_method_from_base_t
23431 #undef using_method_from_value
23436 #undef re_declvalue
23441 #undef template_error
23442 #undef template_warning
23444 #undef type_info_of
23445 #undef type_name_of
23447 #undef is_common_attribute
23448 #undef is_special_attribute
23450 #undef has_attribute
23451 #undef not_has_attribute
23453 #undef float_size_of
23456 #undef def_common_attribute_with_nothing
23457 #undef def_special_attribute_with_nothing
23459 #undef common_attribute_t
23460 #undef special_attribute_t
23463 #undef enabled_by_default
23464 #undef disabled_by_default
23465 #undef enable_if_not_ill_form
23468 #undef was_an_ill_form
23469 #undef was_an_ill_form_with_parameter
23470 #undef was_not_an_ill_form
23471 #undef was_not_an_ill_form_and_noexcept
23472 #undef was_not_an_ill_form_with_parameter
23474 #undef recursive_lambda
23475 #undef get_recursive_lambda_caller
23477 #undef lambda_with_catch
23478 #undef self_recursion
23479 #undef lambda_RLSRRS
23487 #undef _small_than_
23489 #if defined(_MSC_VER)
23495 #undef INTER_NAMESPACE
23496 #undef BREAK_NAMESPACE
23501 #undef template_name
23504 #undef not_in_debug
23509 #undef ELC_TEST_EVENTNAME
23511 #undef override_instance_struct
23515 #undef force_inline
23517 #undef with_no_vtable
23519 #undef in_consteval
23521 #undef no_vtable_struct
23522 #undef no_vtable_class
23526 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
23530 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23533 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_export.hpp"
23542 #define export using defs::
23543 export namespace_n::names;
23548 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/namespace/_body.hpp"
23553 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/namespace"
23558 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
23559 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
23568 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/numerical_representation"
23572 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
23573 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23582 #if !defined(ELC_PACKAGE_SYMBOL_LOADER)
23583 #define ELC_PACKAGE_SYMBOL_LOADER
23584 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23593 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/core"
23597 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23598 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23607 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23611 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23612 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
23621 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/lib_loader"
23625 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
23626 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
23635 #if defined(ELC_TEST)
23636 #error "this part cannot be tested."
23640 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
23653 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/locale/using.hpp"
23657 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
23660 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23668 #if !defined(ELC_PATHS)
23670 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
23679 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base_defs"
23683 #line 10 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23684 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23693 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
23697 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23698 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
23711 #line 70 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/str_code_convert.hpp"
23715 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23717 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/decl_system_type.hpp"
23729 #if defined(__linux)||defined(__linux__)||defined(__gnu_linux__)
23730 #define SYSTEM_TYPE linux
23731 #elif defined(_WIN32)||defined(__MINGW32__)||defined(__CYGWIN__)
23732 #define SYSTEM_TYPE windows
23734 #define SYSTEM_TYPE other
23736 #define ERROR_MSG_UNABLE_OS "Unable OS,edit this file on your own or contact ELC's producers."
23740 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
23742 #if SYSTEM_TYPE == windows
23743 #include <shlobj_core.h>
23744 #elif SYSTEM_TYPE == linux
23745 #include <unistd.h>
23751 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23763 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23765 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
23776 #define BIT_POSSIBILITY 2
23780 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
23782 #if defined(_MSC_VER)
23783 #pragma warning(push,ELC_WARNING_LEVEL)
23784 #pragma warning(disable:4099)
23785 #pragma warning(disable:26812)
23786 #pragma warning(disable:4584)
23787 #pragma warning(disable:4250)
23788 #pragma warning(disable:26432)
23789 #pragma warning(disable:26435)
23790 #pragma warning(disable:26481)
23791 #pragma warning(disable:26446)
23792 #pragma warning(disable:26434)
23793 #pragma warning(disable:26429)
23794 #pragma warning(disable:26471)
23795 #pragma warning(disable:26474)
23796 #pragma warning(disable:26473)
23797 #pragma warning(disable:26456)
23798 #pragma warning(disable:26485)
23799 #pragma warning(disable:26490)
23800 #pragma warning(disable:26472)
23801 #pragma warning(disable:26482)
23802 #pragma warning(disable:26493)
23804 #if defined(_MSC_VER)
23805 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
23806 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
23807 #define push_msvc_warning() __pragma(warning(push))
23808 #define pop_msvc_warning() __pragma(warning(pop))
23809 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
23811 #define suppress_msvc_warning(...)
23812 #define disable_msvc_warning(...)
23813 #define push_msvc_warning()
23814 #define pop_msvc_warning()
23815 #define push_and_disable_msvc_warning(...)
23818 #if defined(ELC_VOID_NAME)
23823 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
23824 #define noexcept_as_auto MAGIC
23825 #define constexpr_as(...) MAGIC constexpr
23826 #define constexpr_as_auto MAGIC MAGIC constexpr
23828 #define using_method_from_base_t(name,...) \
23829 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
23830 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
23832 return base_t::name(forward<Args>(rest)...);\
23835 #define using_method_from_value(name,value_name,...) \
23836 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
23837 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
23839 return value_name.name(forward<Args>(rest)...);\
23842 #define floop while(__builtin_is_my_dick_still_there())
23843 #define enable_adl(name) void name()noexcept=delete
23845 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
23846 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
23848 #define declvalue(...) (::std::declval<__VA_ARGS__>())
23851 #define template_error(reason) static_assert(template_error_helper<T>,reason)
23853 #define template_warning(reason) template_warning_helper<T>(reason)
23856 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
23857 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
23859 #define is_common_attribute(name) public attribute<T,name<T>>
23860 #define is_special_attribute(name) public attribute<T,name>
23862 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
23863 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
23866 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
23868 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
23871 #define def_common_attribute_with_nothing(name) \
23872 template<typename T>\
23875 #define def_special_attribute_with_nothing(name) \
23878 #define common_attribute_t template<class>class
23879 #define special_attribute_t class
23889 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
23891 #define enabled_by_default class enable_state=void
23893 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
23895 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
23897 #define enable_flag class enable_state
23899 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
23900 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
23901 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
23902 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
23903 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
23906 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
23908 #define get_recursive_lambda_caller(name) \
23909 lambda_with_catch(&)(auto&&...Args){\
23910 return name(name,Args...);\
23915 #define lambda_with_catch(...) [__VA_ARGS__]
23917 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
23919 #define lambda_RLSRRS _my_jb_super_sb_name_
23927 #define elseif else if
23929 #define _big_than_ >
23931 #define _small_than_ <
23933 #if defined(_MSC_VER)
23940 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
23942 #define BREAK_NAMESPACE }
23945 #define template_name template
23947 #define type_name class
23949 #if defined(DEBUG) || defined(_DEBUG)
23950 #define not_in_debug 0
23952 #define not_in_debug 1
23956 #define ec(ch) U ## ch
23958 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
23959 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
23961 #define ELC_TEST_EVENTNAME(name)
23964 #define override_instance_struct \
23966 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
23967 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
23968 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
23969 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
23970 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
23972 #if defined(_WIN32)
23973 #define distinctive __declspec(dllexport)
23975 #define distinctive
23978 #if defined(_WIN32)
23979 #define force_inline __forceinline
23980 #elif defined(__GNUC__)
23981 #define force_inline __attribute__((always_inline)) inline
23983 #define force_inline inline
23986 #if defined(_WIN32)
23987 #define with_no_vtable __declspec(novtable)
23989 #define with_no_vtable
23992 #define in_consteval (::std::is_constant_evaluated())
23994 #define no_vtable_struct struct with_no_vtable
23995 #define no_vtable_class class with_no_vtable
23999 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24003 #if SYSTEM_TYPE == windows
24004 #define DYNAMIC_LIBRARY_SUFFIX ".dll"
24006 #define DYNAMIC_LIBRARY_SUFFIX ".so"
24010 #if SYSTEM_TYPE == windows
24011 return GetFileAttributesA(to_char_str(name).c_str())!=INVALID_FILE_ATTRIBUTES;
24012 #elif SYSTEM_TYPE == linux
24013 return access(to_char_str(name).c_str(),F_OK)==0;
24015 auto fp = ::std::fopen(to_char_str(name).c_str(),
"rb");
24024 #if SYSTEM_TYPE == windows
24025 char path[MAX_PATH];
24026 if(!SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA, NULL, 0, path)))
24028 return to_char_t_str(path);
24029 #elif SYSTEM_TYPE == linux
24030 return es"/usr/local/share"_constexpr_str;
24036 #if SYSTEM_TYPE == windows
24037 char path[MAX_PATH];
24038 if(!SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_WINDOWS, NULL, 0, path)))
24040 return to_char_t_str(path)+
es"\\.."_constexpr_str;
24041 #elif SYSTEM_TYPE == linux
24042 return es"/"_constexpr_str;
24048 #if SYSTEM_TYPE == windows
24054 if(program_data_path.size() &&
file_exists(program_data_path +
es"/elc/flag"_constexpr_str))
24055 return program_data_path+
es"/elc"_constexpr_str;
24059 if(system_drive.size() &&
file_exists(system_drive +
es"/elc/flag"_constexpr_str))
24060 return system_drive+
es"/elc"_constexpr_str;
24062 #elif SYSTEM_TYPE == linux
24065 string flag_path=
es"/usr/lib/elc/flag"_constexpr_str;
24067 return es"/usr/lib/elc"_constexpr_str;
24069 return es"./elc"_constexpr_str;
24079 #undef DYNAMIC_LIBRARY_SUFFIX
24081 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
24092 #if defined(_MSC_VER)
24093 #pragma warning(pop)
24095 #undef suppress_msvc_warning
24096 #undef disable_msvc_warning
24097 #undef push_msvc_warning
24098 #undef pop_msvc_warning
24099 #undef push_and_disable_msvc_warning
24102 #undef BIT_POSSIBILITY
24104 #if defined(ELC_VOID_NAME)
24105 #define void the_void
24110 #undef noexcept_as_auto
24111 #undef constexpr_as
24112 #undef constexpr_as_auto
24114 #undef using_method_from_base_t
24115 #undef using_method_from_value
24120 #undef re_declvalue
24125 #undef template_error
24126 #undef template_warning
24128 #undef type_info_of
24129 #undef type_name_of
24131 #undef is_common_attribute
24132 #undef is_special_attribute
24134 #undef has_attribute
24135 #undef not_has_attribute
24137 #undef float_size_of
24140 #undef def_common_attribute_with_nothing
24141 #undef def_special_attribute_with_nothing
24143 #undef common_attribute_t
24144 #undef special_attribute_t
24147 #undef enabled_by_default
24148 #undef disabled_by_default
24149 #undef enable_if_not_ill_form
24152 #undef was_an_ill_form
24153 #undef was_an_ill_form_with_parameter
24154 #undef was_not_an_ill_form
24155 #undef was_not_an_ill_form_and_noexcept
24156 #undef was_not_an_ill_form_with_parameter
24158 #undef recursive_lambda
24159 #undef get_recursive_lambda_caller
24161 #undef lambda_with_catch
24162 #undef self_recursion
24163 #undef lambda_RLSRRS
24171 #undef _small_than_
24173 #if defined(_MSC_VER)
24179 #undef INTER_NAMESPACE
24180 #undef BREAK_NAMESPACE
24185 #undef template_name
24188 #undef not_in_debug
24193 #undef ELC_TEST_EVENTNAME
24195 #undef override_instance_struct
24199 #undef force_inline
24201 #undef with_no_vtable
24203 #undef in_consteval
24205 #undef no_vtable_struct
24206 #undef no_vtable_class
24210 #line 107 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24213 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/APIs/_tools/undef_decl_system_type.hpp"
24226 #undef ERROR_MSG_UNABLE_OS
24230 #line 110 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/paths.hpp"
24235 #line 15 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24237 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24245 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24257 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24259 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
24270 #define BIT_POSSIBILITY 2
24274 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24276 #if defined(_MSC_VER)
24277 #pragma warning(push,ELC_WARNING_LEVEL)
24278 #pragma warning(disable:4099)
24279 #pragma warning(disable:26812)
24280 #pragma warning(disable:4584)
24281 #pragma warning(disable:4250)
24282 #pragma warning(disable:26432)
24283 #pragma warning(disable:26435)
24284 #pragma warning(disable:26481)
24285 #pragma warning(disable:26446)
24286 #pragma warning(disable:26434)
24287 #pragma warning(disable:26429)
24288 #pragma warning(disable:26471)
24289 #pragma warning(disable:26474)
24290 #pragma warning(disable:26473)
24291 #pragma warning(disable:26456)
24292 #pragma warning(disable:26485)
24293 #pragma warning(disable:26490)
24294 #pragma warning(disable:26472)
24295 #pragma warning(disable:26482)
24296 #pragma warning(disable:26493)
24298 #if defined(_MSC_VER)
24299 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
24300 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
24301 #define push_msvc_warning() __pragma(warning(push))
24302 #define pop_msvc_warning() __pragma(warning(pop))
24303 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
24305 #define suppress_msvc_warning(...)
24306 #define disable_msvc_warning(...)
24307 #define push_msvc_warning()
24308 #define pop_msvc_warning()
24309 #define push_and_disable_msvc_warning(...)
24312 #if defined(ELC_VOID_NAME)
24317 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
24318 #define noexcept_as_auto MAGIC
24319 #define constexpr_as(...) MAGIC constexpr
24320 #define constexpr_as_auto MAGIC MAGIC constexpr
24322 #define using_method_from_base_t(name,...) \
24323 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
24324 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
24326 return base_t::name(forward<Args>(rest)...);\
24329 #define using_method_from_value(name,value_name,...) \
24330 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
24331 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
24333 return value_name.name(forward<Args>(rest)...);\
24336 #define floop while(__builtin_is_my_dick_still_there())
24337 #define enable_adl(name) void name()noexcept=delete
24339 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
24340 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
24342 #define declvalue(...) (::std::declval<__VA_ARGS__>())
24345 #define template_error(reason) static_assert(template_error_helper<T>,reason)
24347 #define template_warning(reason) template_warning_helper<T>(reason)
24350 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
24351 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
24353 #define is_common_attribute(name) public attribute<T,name<T>>
24354 #define is_special_attribute(name) public attribute<T,name>
24356 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
24357 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
24360 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
24362 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
24365 #define def_common_attribute_with_nothing(name) \
24366 template<typename T>\
24369 #define def_special_attribute_with_nothing(name) \
24372 #define common_attribute_t template<class>class
24373 #define special_attribute_t class
24383 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
24385 #define enabled_by_default class enable_state=void
24387 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
24389 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
24391 #define enable_flag class enable_state
24393 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
24394 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
24395 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
24396 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
24397 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
24400 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
24402 #define get_recursive_lambda_caller(name) \
24403 lambda_with_catch(&)(auto&&...Args){\
24404 return name(name,Args...);\
24409 #define lambda_with_catch(...) [__VA_ARGS__]
24411 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
24413 #define lambda_RLSRRS _my_jb_super_sb_name_
24421 #define elseif else if
24423 #define _big_than_ >
24425 #define _small_than_ <
24427 #if defined(_MSC_VER)
24434 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
24436 #define BREAK_NAMESPACE }
24439 #define template_name template
24441 #define type_name class
24443 #if defined(DEBUG) || defined(_DEBUG)
24444 #define not_in_debug 0
24446 #define not_in_debug 1
24450 #define ec(ch) U ## ch
24452 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
24453 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
24455 #define ELC_TEST_EVENTNAME(name)
24458 #define override_instance_struct \
24460 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
24461 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
24462 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
24463 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
24464 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
24466 #if defined(_WIN32)
24467 #define distinctive __declspec(dllexport)
24469 #define distinctive
24472 #if defined(_WIN32)
24473 #define force_inline __forceinline
24474 #elif defined(__GNUC__)
24475 #define force_inline __attribute__((always_inline)) inline
24477 #define force_inline inline
24480 #if defined(_WIN32)
24481 #define with_no_vtable __declspec(novtable)
24483 #define with_no_vtable
24486 #define in_consteval (::std::is_constant_evaluated())
24488 #define no_vtable_struct struct with_no_vtable
24489 #define no_vtable_class class with_no_vtable
24493 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24497 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24499 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/package_symbol_loader.hpp"
24507 namespace package_symbol_loader_n{
24510 function_t<ptr(
string lib_name,
size_t lib_ver,
string symbol_name)
noexcept>
load_interface;
24511 function_t<ptr()noexcept> load_error_interface;
24514 if(package_symbol_loader_handle = load_lib(paths::package_symbol_loader_path)){
24515 load_interface = package_symbol_loader_handle->get_symbol_as_function<ptr(
string lib_name,
size_t lib_ver,
string symbol_name)
noexcept>(
es"load_interface");
24516 load_error_interface = package_symbol_loader_handle->get_symbol_as_function<ptr()
noexcept>(
es"load_error_interface");
24519 die_with(locale::str::package_symbol_loader::load_failed);
24520 if(!load_interface)
24521 die_with(locale::str::package_symbol_loader::load_interface_failed);
24525 ptr load_symbol(
string lib_name,
size_t lib_ver,
string symbol_name)noexcept{
24526 return load_interface(lib_name,lib_ver,symbol_name);
24529 return load_error_interface();
24535 #line 19 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24536 #if defined(ELC_TEST_ON)
24537 namespace package_symbol_loader_part_test{
24538 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_test.hpp"
24546 inline void test(){
24549 inline void test_log_out(){}
24550 inline void test_end{}
24554 #line 22 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24558 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
24566 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
24577 #if defined(_MSC_VER)
24578 #pragma warning(pop)
24580 #undef suppress_msvc_warning
24581 #undef disable_msvc_warning
24582 #undef push_msvc_warning
24583 #undef pop_msvc_warning
24584 #undef push_and_disable_msvc_warning
24587 #undef BIT_POSSIBILITY
24589 #if defined(ELC_VOID_NAME)
24590 #define void the_void
24595 #undef noexcept_as_auto
24596 #undef constexpr_as
24597 #undef constexpr_as_auto
24599 #undef using_method_from_base_t
24600 #undef using_method_from_value
24605 #undef re_declvalue
24610 #undef template_error
24611 #undef template_warning
24613 #undef type_info_of
24614 #undef type_name_of
24616 #undef is_common_attribute
24617 #undef is_special_attribute
24619 #undef has_attribute
24620 #undef not_has_attribute
24622 #undef float_size_of
24625 #undef def_common_attribute_with_nothing
24626 #undef def_special_attribute_with_nothing
24628 #undef common_attribute_t
24629 #undef special_attribute_t
24632 #undef enabled_by_default
24633 #undef disabled_by_default
24634 #undef enable_if_not_ill_form
24637 #undef was_an_ill_form
24638 #undef was_an_ill_form_with_parameter
24639 #undef was_not_an_ill_form
24640 #undef was_not_an_ill_form_and_noexcept
24641 #undef was_not_an_ill_form_with_parameter
24643 #undef recursive_lambda
24644 #undef get_recursive_lambda_caller
24646 #undef lambda_with_catch
24647 #undef self_recursion
24648 #undef lambda_RLSRRS
24656 #undef _small_than_
24658 #if defined(_MSC_VER)
24664 #undef INTER_NAMESPACE
24665 #undef BREAK_NAMESPACE
24670 #undef template_name
24673 #undef not_in_debug
24678 #undef ELC_TEST_EVENTNAME
24680 #undef override_instance_struct
24684 #undef force_inline
24686 #undef with_no_vtable
24688 #undef in_consteval
24690 #undef no_vtable_struct
24691 #undef no_vtable_class
24695 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
24699 #line 26 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24702 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_export.hpp"
24711 #define export using defs::package_symbol_loader_n::
24717 #line 29 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/package_symbol_loader/_body.hpp"
24722 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/package_symbol_loader"
24727 #line 23 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
24728 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
24737 #if !defined(ELC_STREAM)
24739 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
24748 #line 18 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/base"
24752 #line 11 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
24753 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
24762 #if defined(ELC_TEST)
24763 #error "this part cannot be tested."
24766 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
24774 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24786 #line 14 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24788 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/basic_environment.hpp"
24799 #define BIT_POSSIBILITY 2
24803 #line 16 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_defs.hpp"
24805 #if defined(_MSC_VER)
24806 #pragma warning(push,ELC_WARNING_LEVEL)
24807 #pragma warning(disable:4099)
24808 #pragma warning(disable:26812)
24809 #pragma warning(disable:4584)
24810 #pragma warning(disable:4250)
24811 #pragma warning(disable:26432)
24812 #pragma warning(disable:26435)
24813 #pragma warning(disable:26481)
24814 #pragma warning(disable:26446)
24815 #pragma warning(disable:26434)
24816 #pragma warning(disable:26429)
24817 #pragma warning(disable:26471)
24818 #pragma warning(disable:26474)
24819 #pragma warning(disable:26473)
24820 #pragma warning(disable:26456)
24821 #pragma warning(disable:26485)
24822 #pragma warning(disable:26490)
24823 #pragma warning(disable:26472)
24824 #pragma warning(disable:26482)
24825 #pragma warning(disable:26493)
24827 #if defined(_MSC_VER)
24828 #define suppress_msvc_warning(...) __pragma(warning(suppress:__VA_ARGS__))
24829 #define disable_msvc_warning(...) __pragma(warning(disable:__VA_ARGS__))
24830 #define push_msvc_warning() __pragma(warning(push))
24831 #define pop_msvc_warning() __pragma(warning(pop))
24832 #define push_and_disable_msvc_warning(...) push_msvc_warning() disable_msvc_warning(__VA_ARGS__)
24834 #define suppress_msvc_warning(...)
24835 #define disable_msvc_warning(...)
24836 #define push_msvc_warning()
24837 #define pop_msvc_warning()
24838 #define push_and_disable_msvc_warning(...)
24841 #if defined(ELC_VOID_NAME)
24846 #define noexcept_as(...) noexcept(noexcept((__VA_ARGS__)))
24847 #define noexcept_as_auto MAGIC
24848 #define constexpr_as(...) MAGIC constexpr
24849 #define constexpr_as_auto MAGIC MAGIC constexpr
24851 #define using_method_from_base_t(name,...) \
24852 template<class...Args> requires was_not_an_ill_form(declvalue(base_t).name(declvalue(Args)...))\
24853 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(base_t::name(declvalue(Args)...))\
24855 return base_t::name(forward<Args>(rest)...);\
24858 #define using_method_from_value(name,value_name,...) \
24859 template<class...Args> requires was_not_an_ill_form(re_declvalue(value_name).name(declvalue(Args)...))\
24860 auto name(Args&&...rest)__VA_ARGS__ noexcept_as(re_declvalue(value_name).name(declvalue(Args)...))\
24862 return value_name.name(forward<Args>(rest)...);\
24865 #define floop while(__builtin_is_my_dick_still_there())
24866 #define enable_adl(name) void name()noexcept=delete
24868 #define re_declvalue(...) (declvalue(decltype(__VA_ARGS__)))
24869 #define re_decltype(...) (decltype(declvalue(__VA_ARGS__)))
24871 #define declvalue(...) (::std::declval<__VA_ARGS__>())
24874 #define template_error(reason) static_assert(template_error_helper<T>,reason)
24876 #define template_warning(reason) template_warning_helper<T>(reason)
24879 #define type_info_of(...) base_type_info_t(typeid(__VA_ARGS__))
24880 #define type_name_of(...) (type_info_of(__VA_ARGS__).name())
24882 #define is_common_attribute(name) public attribute<T,name<T>>
24883 #define is_special_attribute(name) public attribute<T,name>
24885 #define has_attribute(...) template_name has_attribute_helper<__VA_ARGS__>()
24886 #define not_has_attribute(...) template_name not_has_has_attribute_helper<__VA_ARGS__>()
24889 #define float_size_of(...) (float_size_t{sizeof(__VA_ARGS__)})
24891 #define bitnum_of(...) (bitnumof<__VA_ARGS__>)
24894 #define def_common_attribute_with_nothing(name) \
24895 template<typename T>\
24898 #define def_special_attribute_with_nothing(name) \
24901 #define common_attribute_t template<class>class
24902 #define special_attribute_t class
24912 #define enable_if(...) class enable_state= ::std::enable_if_t<__VA_ARGS__>
24914 #define enabled_by_default class enable_state=void
24916 #define disabled_by_default class enable_state= ::std::enable_if_t<false>
24918 #define enable_if_not_ill_form(...) class enable_state= ::std::void_t<decltype(__VA_ARGS__)>
24920 #define enable_flag class enable_state
24922 #define was_an_ill_form(...) (!was_not_an_ill_form(__VA_ARGS__))
24923 #define was_an_ill_form_with_parameter(...) (!was_not_an_ill_form_with_parameter(__VA_ARGS__))
24924 #define was_not_an_ill_form(...) (bool(requires{__VA_ARGS__;}))
24925 #define was_not_an_ill_form_and_noexcept(...) (bool(requires{__VA_ARGS__;{__VA_ARGS__}noexcept;}))
24926 #define was_not_an_ill_form_with_parameter(...) (bool(requires __VA_ARGS__ ))
24929 #define recursive_lambda(...) lambda(auto&&lambda_RLSRRS,__VA_ARGS__)
24931 #define get_recursive_lambda_caller(name) \
24932 lambda_with_catch(&)(auto&&...Args){\
24933 return name(name,Args...);\
24938 #define lambda_with_catch(...) [__VA_ARGS__]
24940 #define self_recursion(...) lambda_RLSRRS(lambda_RLSRRS,__VA_ARGS__)
24942 #define lambda_RLSRRS _my_jb_super_sb_name_
24950 #define elseif else if
24952 #define _big_than_ >
24954 #define _small_than_ <
24956 #if defined(_MSC_VER)
24963 #define INTER_NAMESPACE(NAMESPACENAME) namespace NAMESPACENAME{
24965 #define BREAK_NAMESPACE }
24968 #define template_name template
24970 #define type_name class
24972 #if defined(DEBUG) || defined(_DEBUG)
24973 #define not_in_debug 0
24975 #define not_in_debug 1
24979 #define ec(ch) U ## ch
24981 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
24982 #define ELC_TEST_EVENTNAME(name) stest_eventer _the_stest_eventer__(L""name)
24984 #define ELC_TEST_EVENTNAME(name)
24987 #define override_instance_struct \
24989 virtual void abstract_method_unget_this()noexcept_as(instance_struct<this_t>::abstract_method_unget_this())override{instance_struct<this_t>::abstract_method_unget_this();}\
24990 virtual void* _abstract_method_copy_get_this()noexcept_as(instance_struct<this_t>::_abstract_method_copy_get_this())override{return instance_struct<this_t>::_abstract_method_copy_get_this();}\
24991 virtual void* _abstract_method_get_resize_this(size_t size)noexcept_as(instance_struct<this_t>::instance_struct<this_t>::_abstract_method_get_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_resize_this(size);}\
24992 virtual void* _abstract_method_get_forward_resize_this(size_t size)noexcept_as(instance_struct<this_t>::_abstract_method_get_forward_resize_this(size))override{return instance_struct<this_t>::_abstract_method_get_forward_resize_this(size);}\
24993 virtual size_t abstract_method_get_size_of_get_for_this()noexcept override{return instance_struct<this_t>::abstract_method_get_size_of_get_for_this();}
24995 #if defined(_WIN32)
24996 #define distinctive __declspec(dllexport)
24998 #define distinctive
25001 #if defined(_WIN32)
25002 #define force_inline __forceinline
25003 #elif defined(__GNUC__)
25004 #define force_inline __attribute__((always_inline)) inline
25006 #define force_inline inline
25009 #if defined(_WIN32)
25010 #define with_no_vtable __declspec(novtable)
25012 #define with_no_vtable
25015 #define in_consteval (::std::is_constant_evaluated())
25017 #define no_vtable_struct struct with_no_vtable
25018 #define no_vtable_class class with_no_vtable
25022 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_defs.hpp"
25026 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25028 #if defined(ELC_TEST_ON)
25029 namespace stream_part_test{
25030 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_test.hpp"
25038 inline void test(){
25041 inline void test_log_out(){
25043 inline void test_end{
25048 #line 17 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25052 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
25060 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/../../../_share/_undefs.hpp"
25071 #if defined(_MSC_VER)
25072 #pragma warning(pop)
25074 #undef suppress_msvc_warning
25075 #undef disable_msvc_warning
25076 #undef push_msvc_warning
25077 #undef pop_msvc_warning
25078 #undef push_and_disable_msvc_warning
25081 #undef BIT_POSSIBILITY
25083 #if defined(ELC_VOID_NAME)
25084 #define void the_void
25089 #undef noexcept_as_auto
25090 #undef constexpr_as
25091 #undef constexpr_as_auto
25093 #undef using_method_from_base_t
25094 #undef using_method_from_value
25099 #undef re_declvalue
25104 #undef template_error
25105 #undef template_warning
25107 #undef type_info_of
25108 #undef type_name_of
25110 #undef is_common_attribute
25111 #undef is_special_attribute
25113 #undef has_attribute
25114 #undef not_has_attribute
25116 #undef float_size_of
25119 #undef def_common_attribute_with_nothing
25120 #undef def_special_attribute_with_nothing
25122 #undef common_attribute_t
25123 #undef special_attribute_t
25126 #undef enabled_by_default
25127 #undef disabled_by_default
25128 #undef enable_if_not_ill_form
25131 #undef was_an_ill_form
25132 #undef was_an_ill_form_with_parameter
25133 #undef was_not_an_ill_form
25134 #undef was_not_an_ill_form_and_noexcept
25135 #undef was_not_an_ill_form_with_parameter
25137 #undef recursive_lambda
25138 #undef get_recursive_lambda_caller
25140 #undef lambda_with_catch
25141 #undef self_recursion
25142 #undef lambda_RLSRRS
25150 #undef _small_than_
25152 #if defined(_MSC_VER)
25158 #undef INTER_NAMESPACE
25159 #undef BREAK_NAMESPACE
25164 #undef template_name
25167 #undef not_in_debug
25172 #undef ELC_TEST_EVENTNAME
25174 #undef override_instance_struct
25178 #undef force_inline
25180 #undef with_no_vtable
25182 #undef in_consteval
25184 #undef no_vtable_struct
25185 #undef no_vtable_class
25189 #line 8 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/_share/_undefs.hpp"
25193 #line 21 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25196 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_export.hpp"
25205 #define export using defs::
25210 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/_files/stream/_body.hpp"
25215 #line 12 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/stream"
25220 #line 24 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
25221 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
25230 #line 13 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/string"
25234 #line 25 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
25236 #line 1 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/void_name"
25245 #if !defined(ELC_VOID_NAME)
25246 #define ELC_VOID_NAME
25248 #define void the_void
25253 #line 27 "https://github.com/ELC-lang/ELC/tree/master/parts/header_file/files/elc/all"
#define get_recursive_lambda_caller(name)
#define was_not_an_ill_form(...)
#define special_attribute_t
#define float_size_of(...)
#define was_not_an_ill_form_and_noexcept(...)
#define DYNAMIC_LIBRARY_SUFFIX
#define INTER_NAMESPACE(NAMESPACENAME)
#define was_not_an_ill_form_with_parameter(...)
#define defspecflag(name)
#define using_method_from_value(name, value_name,...)
#define was_an_ill_form(...)
#define template_error(reason)
#define lambda_with_catch(...)
#define pop_msvc_warning()
#define suppress_msvc_warning(...)
#define push_and_disable_msvc_warning(...)
#define ELC_TEST_EVENTNAME(name)
#define has_attribute(...)
#define is_common_attribute(name)
#define constexpr_as(...)
#define template_warning(reason)
#define recursive_lambda(...)
#define constexpr_as_auto
#define override_instance_struct
#define def_special_attribute_with_nothing(name)
#define self_recursion(...)
#define common_attribute_t
#define def_common_attribute_with_nothing(name)
constexpr flag(flag_set_type a=not_set) noexcept
void operator=(flag &) &noexcept=delete
void operator=(flag &&) &noexcept=delete
constexpr same_base_t(const same_base_t< other_T, other_base_t > &a) noexcept(construct< base_t_rw >.nothrow< other_base_t >)
constexpr value_type operator*() noexcept(noexcept((is_value_getter_noexcept())))
base_t_w next_getter() const noexcept(is_next_getter_noexcept())
static constexpr bool is_handle_getter_noexcept() noexcept
constexpr same_base_t(const this_t &a) noexcept(construct< base_t_rw >.nothrow< const base_t_rw >)
~same_base_t() noexcept(destruct.nothrow< base_t_rw >)=default
value_t * handle_getter() const noexcept(is_handle_getter_noexcept())
constexpr void swap_with(this_t &a) noexcept(noexcept((swap((::std::declval< base_t_rw & >()),(::std::declval< base_t_rw & >())))))
decltype(value_type_getter()) ::template type value_type
remove_cv< base_t_w > base_t_rw
constexpr auto operator<=>(const same_base_t< other_value_t, other_base_t_w > &a) const noexcept(compare.nothrow< base_t_rw, other_base_t_w >)
constexpr same_base_t() noexcept=default
static constexpr bool is_value_getter_noexcept() noexcept
constexpr same_base_t(this_t &&a) noexcept(noexcept(((::std::declval< this_t >()).swap_with(a))))
base_t_w before_getter() const noexcept(is_before_getter_noexcept())
static constexpr bool is_before_getter_noexcept() noexcept
constexpr value_t * operator->() noexcept(is_handle_getter_noexcept())
static constexpr auto value_type_getter()
same_base_t< value_t, base_t_w > this_t
static constexpr bool is_next_getter_noexcept() noexcept
value_type value_getter() const noexcept(is_handle_getter_noexcept())
constexpr bool operator==(value_t *a) const noexcept(is_handle_getter_noexcept()&&noexcept(pointer_equal((::std::declval< value_t * >()),(::std::declval< value_t * >()))))
constexpr void add(cons *a) noexcept
iterator_t< T, cons * > iterator
constexpr list_t() noexcept
constexpr iterator begin() noexcept
constexpr iterator head() noexcept
constexpr bool empty() const noexcept
constexpr iterator end() noexcept
constexpr rot_iterator operator--(int) noexcept
constexpr rot_iterator & operator--() noexcept
constexpr rot_iterator(size_t offset) noexcept
constexpr size_t value() const noexcept
constexpr rot_iterator operator++(int) noexcept
constexpr rot_iterator & operator++() noexcept
constexpr mark_able(mark_type a=not_mark) noexcept
void mark() const noexcept
bool was_marked() const noexcept
void unmark() const noexcept
constexpr maybe_fail_reference(T &a)
constexpr maybe_fail_reference(note::fail_t)
constexpr maybe_fail_reference(const maybe_fail_reference &)=default
void push_back(const T &a)
friend this_t operator+(const this_t &a, U &&b) noexcept(noexcept((a.copy()+=b)))
constexpr auto operator==(array_like_view_t< const T > a) const noexcept(equal.nothrow< array_like_view_t< T > >)
array_t(const this_t &a) noexcept(noexcept(((::std::declval< this_t >()).copy())))
friend this_t operator+(U &&a, const this_t &b) noexcept(noexcept((this_t(a)+=b)))
constexpr iterator get_iterator_at(size_t a) noexcept
const_iterator_t< T > const_iterator
this_t && operator+(U &&b) &&noexcept(noexcept((*this+=b)))
friend this_t & operator+=(this_t &a, zero_t b) noexcept(get< T >.apply_end.nothrow< T >)
void insert(size_t index, size_t count, const T *data) noexcept(insert_nothrow)
void insert_with_forward_resize(size_t index, size_t count, const T *data, size_t new_size) noexcept(insert_with_forward_resize_nothrow)
array_t(U &&a) noexcept(get< T >.as_array.nothrow< U >)
size_t size() const noexcept
friend this_t & operator+=(this_t &a, U &&b) noexcept(get< T >.apply_end.nothrow< U >)
void forward_resize(size_t size) noexcept(forward_resize_nothrow)
constexpr auto operator==(const this_t &a) const noexcept(equal.nothrow< array_like_view_t< T > >)
void resize(size_t size) noexcept(resize_nothrow)
this_t & operator=(const this_t &a) &noexcept(noexcept(((::std::declval< this_t >()).copy())))
const_iterator end() const noexcept
iterator find(U &&a) noexcept
const T & operator[](size_t pos) const noexcept
~array_t() noexcept(unget.nothrow< T >)
void swap_with(this_t &a) noexcept
constexpr auto operator<=>(const this_t &a) const noexcept(compare.nothrow< array_like_view_t< T > >)
array_t(this_t &&a) noexcept
const_iterator cbegin() const noexcept
size_t size_in_byte() const noexcept
constexpr auto operator<=>(array_like_view_t< const T > a) const noexcept(compare.nothrow< array_like_view_t< T > >)
T & operator[](size_t pos) noexcept
this_t & operator=(this_t &&a) &noexcept
const_iterator find(U &&a) const noexcept
void clear() noexcept(re_construct.nothrow< this_t >)
array_t(note::size_t< size_t >size) noexcept(get< T >.nothrow<>)
const_iterator cend() const noexcept
constexpr array_t() noexcept
array_t(note::size_t< size_t >size, const T &elem) noexcept(get< T >.nothrow<>)
constexpr iterator begin() noexcept
void insert(size_t index, size_t count) noexcept(insert_nothrow)
constexpr const_iterator begin() const noexcept
void insert_with_resize(size_t index, size_t count, const T *data, size_t new_size) noexcept(insert_nothrow)
constexpr const_iterator get_iterator_at(size_t a) const noexcept
bool operator==(const this_t &a) const
base_func_data_t< Ret_t(Args_t...)> base_t_w
maybe_fail_reference< T > get_as() noexcept
function_data_saver_t< Ret_t(Args_t...)> this_t
bool was_an() const noexcept
function_data_saver_t(this_t &&a) noexcept
comn_ptr_t< base_t_w > ptr_t
void swap_with(this_t &a) noexcept
function_data_saver_t() noexcept=default
Ret_t call(Args_t &&...rest) const
void swap(base_t_w &a) noexcept
~hash_table_t() noexcept(destruct.nothrow< base_t_w >)=default
void add(const T &a) noexcept(hash_nothrow< const T & > &&bucket_t::add_nothrow)
bool remove(const T &a) noexcept(bucket_t::remove_nothrow)
array_t< bucket_t > base_t_w
hash_table_t(special_init_t, size_t bucket_size) noexcept
this_t & operator=(base_t_w &&a) &noexcept
maybe_fail_reference< T > find(U &&a) noexcept(find_nothrow< U >)
hash_table_t(const this_t &a) noexcept
this_t & operator=(const base_t_w &a) &noexcept
bool in_table(const T &a) noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
hash_table_t(this_t &&a) noexcept
bool not_in_table(const T &a) noexcept(noexcept(((::std::declval< this_t >()).in_table(a))))
void clear() noexcept(re_construct.nothrow< this_t >)
void clear() noexcept(re_construct.nothrow< this_t >)
this_t & operator=(const this_t &a) noexcept
const T & operator[](const key_t &a) const noexcept
T & operator[](const key_t &a) noexcept(noexcept((_m.add({a, T()}))))
bool operator==(const this_t &a) const noexcept(shrink_nothow &&equal.nothrow< T >)
void shrink() const noexcept(shrink_nothow)
void swap(map_t< T, key_t, stack_t, _ > &a) noexcept
this_t & operator=(const this_t &a) &noexcept(noexcept(((::std::declval< this_t >()).copy())))
base_stack_t(const this_t &a) noexcept(noexcept(((::std::declval< this_t >()).copy())))
hash_t get_top_hash() noexcept(noexcept((hash((::std::declval< T & >())))))
void clear() noexcept(re_construct.nothrow< this_t >)
bool empty() const noexcept
bool remove(const T_ &a) noexcept(remove_nothrow &&equal.nothrow< T_, T >)
bool not_in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).in_stack(a))))
bool in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
~base_stack_t() noexcept(unget.nothrow< data_t >)
void swap_with(this_t &a) noexcept
constexpr base_stack_t() noexcept
void add(const T &a) noexcept(add_nothrow)
void move_top_to(this_t &a) noexcept
size_t size() const noexcept
struct elc::defs::container::stack_n::base_stack_t::data_t * _m
maybe_fail_reference< T > find(U &&a) noexcept(noexcept(((::std::declval< T & >())==a)))
base_stack_t(this_t &&a) noexcept
void add(data_t *a) noexcept
this_t & operator=(this_t &&a) &noexcept
constexpr exception() noexcept=default
virtual void * _abstract_method_get_forward_resize_this(size_t size)=0
virtual size_t abstract_method_get_size_of_get_for_this() noexcept=0
virtual void * _abstract_method_copy_get_this()=0
virtual void abstract_method_unget_this()=0
virtual void * _abstract_method_get_resize_this(size_t size)=0
virtual size_t abstract_method_get_size_of_get_for_this() noexcept override
virtual void * _abstract_method_get_forward_resize_this(size_t size) noexcept(get_forward_resize.able< T >?get_forward_resize.nothrow< T >:1) override
virtual void abstract_method_unget_this() noexcept(noexcept((unget(get_handle(this))))) override
virtual void * _abstract_method_get_resize_this(size_t size) noexcept(get_resize.able< T >?get_resize.nothrow< T >:1) override
virtual void * _abstract_method_copy_get_this() noexcept(copy_get.able< T >?copy_get.nothrow< T >:1) override
void add_gc_method(type_info_t< T >) noexcept
void remove_gc_success_identifier(success_identifier_t a)
void operator()() const noexcept
void add_gc_method(gc_method_t a) noexcept
void remove_gc_method(type_info_t< T >) noexcept
void add_gc_success_identifier(success_identifier_t a) noexcept
bool success() const noexcept
void remove_gc_method(gc_method_t a)
root_of() noexcept(noexcept((roots_of< T >.add((::std::declval< this_t * >())))))
virtual void map_and_mark() noexcept=0
constexpr roots_t() noexcept=default
constexpr placement_construct_t operator[](T *p) const noexcept
T operator()(Args &&...rest) const noexcept(nothrow< Args... >)
void cut_ref() const noexcept
constexpr ref_t() noexcept=default
constexpr void add_ref() const noexcept
constexpr void init_never_ref_num_zero() noexcept
link_num_t link_num() const noexcept
bool cut_ref() const noexcept
void cut_ref() const noexcept
arec_t && operator=(const arec_t &&ch) &&noexcept
arec_t && operator=(char_T a) &&noexcept
const char_T * operator&() const &&noexcept
char_T * operator&() &&noexcept
arec_t(string_t *to, size_t index) noexcept
arec_t(special_init_t, const arec_t &ref) noexcept
floating_arec_t && operator=(floating_arec_result_type a) &&noexcept
floating_arec_t(special_init_t, const floating_arec_t &ref) noexcept
floating_arec_t(string_t *to, float_t index) noexcept
pointer correct_pointer(pointer a, size_t align)
constexpr size_t overhead_get_offset_value(size_t align)
void set_overhead(pointer a, size_t size)
pointer recorrect_pointer(pointer a, size_t align)
constexpr size_t correct_size(size_t size, size_t align)
constexpr size_t overhead_get_align(size_t align)
constexpr size_t correct_align(size_t align)
size_t get_overhead(const_pointer a)
void free(byte *p, size_t align) noexcept
size_t get_size_of_alloc(const byte *p, size_t align) noexcept
struct elc::APIs::alloc::source_location_info_t operate_source_location
byte * aligned_alloc(size_t align, size_t size) noexcept
byte * realloc(byte *ptr, size_t nsize, size_t align) noexcept
void die_with(const char_t *err_msg) noexcept
void base_free_library(library_handle handle) noexcept
void * get_symbol(library_handle handle, string symbol_name) noexcept
library_handle load_library(string file_name) noexcept
void * base_get_symbol(library_handle handle, const char *symbol_name) noexcept
library_handle base_load_library(const char *file_name) noexcept
string base_get_load_error() noexcept
void free_library(library_handle handle) noexcept
string get_load_error() noexcept
string_t< char_t > to_char_t_str(string_view_t< char > a) noexcept
string_t< char > to_char_str(string_view_t< char_t > a) noexcept
constexpr auto begin_of_array_like(T &&a) noexcept
constexpr size_t size_of_array_like(T &&) noexcept
constexpr bool is_array_like_for
constexpr bool is_array_like
constexpr bool is_not_signal_value_for_array_like
constexpr bool is_signal_value_for_array_like
auto end_of_array_like(T &&a) noexcept
constexpr auto empty_constexpr_str_of
function_type_getter< T >::type get_function_type
constexpr auto function_type_getter_conditional_helper()
void the_pointer_hash() noexcept=delete
struct elc::defs::base::hash_n::hash_t hash
constexpr hash_value_t pointer_hash(T *a) noexcept
constexpr bool is_unstable_hash
constexpr bool is_fundamental_hash
void swap(same_base_t< value_t, base_t_w > &a, same_base_t< value_t, base_t_w > &b) noexcept(noexcept((a.swap_with(b))))
auto operator<=>(const reverse_base_t< base_t > &a, const reverse_base_t< base_t > &b) noexcept(compare.nothrow< base_t >)
constexpr auto get_result(auto y1, auto k, auto δx) noexcept
constexpr auto get_reverse_result(auto k, auto δx, auto y) noexcept
constexpr auto get_k(auto y1, auto y2, auto δx) noexcept
requires ::std::is_arithmetic_v< T > constexpr T copy_as_negative(auto x, bool negative=1) noexcept
constexpr void set_rounding(int mode)
requires ::std::is_floating_point_v< T > constexpr auto trunc(const T v) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotr(const T v, const auto R) noexcept
requires ::std::is_arithmetic_v< T > constexpr bool feq(const T a, const T b) noexcept
constexpr size_t get_next_gold_size_to_resize_for_array(size_t size)
constexpr auto pow(const T a, const U b) noexcept
constexpr size_t get_next_gold_size_to_resize_for_hash(size_t size)
requires ::std::is_arithmetic_v< T > constexpr auto abs(const T v) noexcept
constexpr auto sub(const T1 a, const T2 b) noexcept
requires ::std::is_floating_point_v< T > constexpr auto ceil(const T v) noexcept
requires ::std::is_arithmetic_v< T > constexpr auto log(const T a) noexcept
requires ::std::is_arithmetic_v< T1 > and ::std::is_arithmetic_v< T2 > constexpr auto mod(T1 a, T2 b)
requires ::std::is_arithmetic_v< T > constexpr bool is_negative(T x) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotl_nomod(const T v, const auto R) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotr_nomod(const T v, const auto r) noexcept
requires ::std::is_arithmetic_v< T > constexpr bool is_prime_num(T a)
requires ::std::is_arithmetic_v< T > constexpr size_t to_size_t(T x) noexcept
requires ::std::is_unsigned_v< T > constexpr auto rotl(const T v, const auto R) noexcept
constexpr int get_rounding()
requires ::std::is_arithmetic_v< T >constexpr ::std::uintmax_t to_uintmax_t(T x) noexcept
constexpr auto gold_of_resize
requires ::std::is_floating_point_v< T > constexpr T exp(const T v) noexcept
requires ::std::is_arithmetic_v< T > constexpr T get_prime_num_big_or_eq_than(T a)
constexpr struct elc::defs::base::note_n::fail_t fail
constexpr size_t< T > size(T v)
constexpr auto get_null_ptr() noexcept
constexpr struct elc::defs::base::null_ptr_n::null_ptr_t null_ptr
void the_get_null_ptr() noexcept=delete
constexpr size_t find_first_not_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * base_find_last_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_last_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
constexpr T * in_range_but_reverse(T &pattern, array_like_view_t< T >range)
constexpr T * find_last_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * base_find_first_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_first_not_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
constexpr size_t find_last_not_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * base_find_last_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr size_t find_last_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_first_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr size_t in_range_but_reverse_size_t(T &pattern, array_like_view_t< T >range)
constexpr size_t find_first_of_size_t(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_first_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
constexpr T * base_find_first_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_last_not_of_bitmark(const bitmark_for_finds< T > &mark, array_like_view_t< T >range)
static constexpr size_t npos
constexpr bool in_range(T pattern, const range_t< T >range) noexcept(noexcept((bool((::std::declval< T >())>=(::std::declval< const T >()) &&(::std::declval< T >())<=(::std::declval< const T >())))))
constexpr size_t in_range_size_t(T &pattern, array_like_view_t< T >range)
constexpr T * find_first_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
constexpr T * find_last_not_of(array_like_view_t< T >pattern, array_like_view_t< T >range)
string_view_t< char_t > string_view
constexpr struct elc::defs::base::compare_t compare
hash_n::unstable_hash_value_t unstable_hash_t
constexpr struct elc::defs::base::equal_t equal
static void destroy(T *a) noexcept
auto & assign(T &&a, U &&b) noexcept(noexcept((a=b)))
constexpr bool is_all_byte_zero(T &&a)
auto template_warning_helper(U &&a) noexcept
::std::remove_cvref_t< T > remove_cvref
constexpr struct elc::defs::base::zero_t zero
constexpr T down_cast(U a) noexcept
constexpr logical_bool neither
constexpr struct elc::defs::base::just_an_part_t just_an_part
constexpr struct elc::defs::base::min_t min
constexpr struct elc::defs::base::special_init_t special_init
constexpr auto is_eq(T &&a, T &&b) noexcept(noexcept((&a==&b)))
void the_destroy() noexcept=delete
constexpr ptrdiff_t get_off_set(note::from_t< const_pointer >a, note::to_t< const_pointer >b) noexcept
constexpr bool template_error_helper
constexpr auto unapply_off_set(T *b, ptrdiff_t c) noexcept
constexpr byte * cast_to_data(T *p)
constexpr struct elc::defs::base::end_by_zero_t end_by_zero
::std::remove_reference_t< T > remove_ref
constexpr type_info_t< T > type_info
constexpr logical_bool either
constexpr auto pointer_to_bool(T *a) noexcept
constexpr auto pointer_equal(T *a, T *b) noexcept
decltype(nullptr) nullptr_t
constexpr struct elc::defs::base::never_ref_num_zero_t never_ref_num_zero
size_t the_number_of(type_info_t< T >) noexcept
::std::remove_cv_t< T > remove_cv
constexpr struct elc::defs::base::max_t max
::std::conditional_t< B, T, F > conditional
hash_n::hash_value_t hash_t
decltype(null_ptr) null_ptr_t
constexpr T & data_cast(byte *p)
constexpr const T add_const(T a) noexcept
requires ::std::is_integral_v< T > constexpr size_t number_of_possible_values_per
auto & attribute_cast(T &t) noexcept
constexpr auto apply_off_set(T *a, ptrdiff_t c) noexcept
constexpr bool full_equal_in_byte(const T &a, const T &b)
constexpr bool operator==(const type_info_t< T > &, const type_info_t< T > &)
T * get_handle(attribute< T, attribute_name > *a) noexcept
auto attribute_ptr_cast(T *ptr) noexcept
constexpr logical_bool unknown
void the_pointer_equal() noexcept=delete
constexpr invoke_t< T > invoke
constexpr T & remove_const(const T &a) noexcept
constexpr bool is_pointer
void the_pointer_to_bool() noexcept=delete
constexpr size_t bitnumof
constexpr auto is_not_eq(T &&a, T &&b) noexcept(noexcept((!is_eq(a, b))))
const void * const_pointer
default_func_data_t< Ret_t(Args_t...)> default_func_data
base_function_t(T) -> base_function_t< Func_t, promise_nothrow_at_destruct >
bool was_an(const_ptr p) noexcept
map_t< ptr, T > long_term_binary_node_storager
const T & const_use_by_ref_as(const_ptr p) noexcept
comn_ptr_t< const node_like > const_ptr
constexpr bool as_value_nothrow_helper() noexcept
decltype(auto) as_value(T &&a) noexcept(as_value_nothrow_helper< T >())
ptr make_binary_node_from(T a) noexcept
weak_ptr_t< const node_like > const_weak_ptr
T use_as(const_ptr p) noexcept
comn_ptr_t< node_like > ptr
ptr make_long_term_binary_node_from(T a) noexcept
weak_ptr_t< node_like > weak_ptr
decltype(auto) as_ptr(T &&a) noexcept(as_ptr_nothrow_helper< T >())
elc::defs::core::nil_t nil
T & use_by_ref_as(ptr p) noexcept
maybe_fail_reference< T > maybe_fail_use_by_ref_as(ptr p) noexcept
library_handle_t get_library_handle_form_symbol(function_t< Func_t > symbol) noexcept
comn_ptr_t< library_info_t > library_handle_t
library_handle_t load_lib(string lib_name) noexcept
string get_symbol_name_form_symbol(function_t< Func_t > symbol) noexcept
constexpr auto expr_incomplete
constexpr auto ending_of_expr_beyond_expectations
constexpr auto symbol_is_undefined
constexpr auto expr_too_outrageous
constexpr auto setlocale_error
constexpr auto code_convert_error
constexpr auto unknow_error
constexpr auto core_runtime_internal_helper_leak
constexpr auto empty_gc_method
constexpr auto load_interface_failed
constexpr auto load_failed
const ::std::locale default_locale
thread_local ptrdiff_t off_set
void * get_ptr_after_off_set(void *a) noexcept
thread_local pointer base_ptr
void is_base_ptr(void *a) noexcept
void is_instance_ptr(void *a) noexcept
void * alloc_method(type_info_t< T >) noexcept
size_t get_size_of_alloc_method(const T *arg) noexcept
size_t base_get_size_of_alloc(const byte *arg, size_t align) noexcept
void free_method(T *arg) noexcept
void * realloc_method(T *&ptr, size_t new_size) noexcept
byte * base_aligned_alloc(size_t align, size_t size) noexcept
byte * base_realloc(byte *ptr, size_t nsize, size_t align) noexcept
void base_free(byte *p, size_t align) noexcept
constexpr alloc_t< T > alloc
constexpr struct elc::defs::memory::alloc_n::get_size_of_alloc_t get_size_of_alloc
void the_alloc_method() noexcept=delete
void the_free_method() noexcept=delete
constexpr struct elc::defs::memory::alloc_n::free_t free
void the_realloc_method() noexcept=delete
constexpr struct elc::defs::memory::alloc_n::realloc_t realloc
void the_get_size_of_alloc_method() noexcept=delete
bool default_gc_success_identifier() noexcept
void destory_by_gc() noexcept=delete
constexpr bool use_default_gc_able
void default_gc_method() noexcept
constexpr bool use_default_gc_success_identifier_able
size_t count_for_success_identify
void gc_method_of() noexcept
bool gc_success_identifier_of() noexcept
void gc_for_alloc() noexcept
size_t forward_alloc_size_grow_with_insert_uninitialized_data(T *&arg, size_t to_size, size_t insert_pos, size_t insert_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr struct elc::defs::memory::get_n::copy_get_t copy_get
constexpr struct elc::defs::memory::get_n::get_resize_t get_resize
constexpr struct elc::defs::memory::get_n::unget_t unget
void forward_alloc_size_cut(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
void alloc_size_cut(T *&arg, size_t to_size) noexcept
void alloc_size_grow(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr struct elc::defs::memory::get_n::get_size_of_get_t get_size_of_get
void forward_alloc_size_grow(T *&arg, size_t to_size) noexcept(move.trivial< T > or move.nothrow< T >)
void alloc_size_grow_with_insert_uninitialized_data(T *&arg, size_t insert_pos, size_t insert_size) noexcept(move.trivial< T > or move.nothrow< T >)
constexpr bool copy_construct_nothrow
constexpr bool destruct_trivial
constexpr bool move_assign_trivial
constexpr bool move_assign_able
constexpr struct elc::defs::memory::lifetime_n::move_construct_t move_construct
constexpr bool move_construct_nothrow
T * super_speed_trivial_copy_from_one(T *to, const T &value, size_t size) noexcept
constexpr bool construct_able
constexpr bool destruct_nothrow
constexpr bool copy_assign_able
constexpr struct elc::defs::memory::lifetime_n::copy_assign_t copy_assign
constexpr bool construct_nothrow
constexpr bool copy_construct_able
constexpr bool copy_construct_trivial
constexpr bool construct_trivial
constexpr bool destruct_able
constexpr bool move_assign_nothrow
constexpr struct elc::defs::memory::lifetime_n::destruct_t destruct
constexpr struct elc::defs::memory::lifetime_n::copy_construct_t copy_construct
constexpr bool move_construct_trivial
constexpr bool copy_assign_trivial
constexpr construct_t< T > construct
constexpr struct elc::defs::memory::lifetime_n::move_t move
constexpr bool copy_assign_nothrow
constexpr bool move_construct_able
constexpr struct elc::defs::memory::lifetime_n::copy_t copy
void destroy_and_free(T *a) noexcept
void the_destroy_and_free() noexcept=delete
link_num_t get_ref_num(const T *a) noexcept
void waiting_for_destroy(T *a) noexcept
constexpr bool was_weak_ref_able
void map_and_mark_for_gc() noexcept=delete
void the_waiting_for_destroy() noexcept=delete
link_num_t get_weak_ref_num(const T *a) noexcept
constexpr bool was_ref_able
void map_all(func_t &&a) noexcept(noexcept(((::std::declval< func_t >())((::std::declval< T * >())))))
void map_all_helper(func_t &&a)
null_string_data_t< char_T > null_string_data
string_t(const char_T *) -> string_t< char_T >
string_t< char_t > string
value arec_as_value(string_t< char_T > &str, const value index)
bool file_exists(const string &name) noexcept
string get_system_drive() noexcept
string get_elc_runtime_lib_path() noexcept
string get_program_data_path() noexcept
constexpr auto package_symbol_loader_file_name
string elc_runtime_lib_path
string package_symbol_loader_path
constexpr source_location_guard(size_t lookup=0) noexcept
constexpr const char * file() noexcept
constexpr uint_least32_t line() noexcept
static constexpr size_t get_length_of(T *ptr)
constexpr array_end_by_zero_t(T *ptr)
array_like_view_t< T > base_t
constexpr size_t size() const noexcept
constexpr const_iterator c_str() const noexcept
constexpr const_iterator begin() const noexcept
constexpr T & operator[](size_t pos) noexcept
constexpr array_like_view_t(T *a, size_t b) noexcept
constexpr const T & operator[](size_t pos) const noexcept
constexpr array_like_view_t(const this_t &) noexcept=default
constexpr iterator begin() noexcept
constexpr auto operator<=>(this_t a) noexcept(compare.nothrow< T >)
constexpr bool empty() const noexcept
constexpr auto operator==(this_t a) noexcept(equal.nothrow< T >)
constexpr array_like_view_t(U &&a) noexcept(noexcept((begin_of_array_like< T >(a), size_of_array_like< T >(a))))
constexpr iterator end() noexcept
void swap_with(this_t &b) noexcept(noexcept((swap(_begin, b._begin), swap(_size, b._size))))
constexpr const_iterator cbegin() const noexcept
array_like_view_t< T > this_t
constexpr const_iterator end() const noexcept
constexpr const_iterator cend() const noexcept
friend const U * get_handle(const attribute< U, another_attribute_name > *) noexcept
friend U * get_handle(attribute< U, another_attribute_name > *) noexcept
constexpr const T * get_handle() const noexcept
constexpr T * get_handle() noexcept
constexpr base_type_info_t(const base_type_info_t &) noexcept=default
constexpr base_type_info_t(const ::std::type_info &a) noexcept
bool operator==(const base_type_info_t &a) const noexcept
size_t get_hash() const noexcept
bool operator==(const ::std::type_info &a) const noexcept
type_name_t get_name() const noexcept
constexpr auto operator()(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto reverse(strong_ordering odr) const noexcept
constexpr auto operator()(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto reverse(partial_ordering odr) const noexcept
constexpr auto operator()(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
constexpr auto reverse(weak_ordering odr) const noexcept
decltype(base_call((::std::declval< T >()),(::std::declval< U >()))) type
constexpr auto lexicographical(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, U *b, size_t size) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T &&a, U &&b) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool able
constexpr auto operator()(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr auto operator()(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool nothrow
constexpr auto lexicographical(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr auto base_call(T &&a, U &&b) noexcept(nothrow< T, U >)
constexpr auto lexicographical(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr cons_t()=default
const char_T * _array_begin
constexpr auto get_constexpr_str_t() const noexcept
constexpr constexpr_str_t_literal_helper(const char_T(&str)[N]) noexcept
range_n::bitmark_for_finds< const char_T > bitmark_for_finds
range_n::reverse_match_pattern< const char_T > reverse_match_pattern
constexpr_str_view_t< char_T > base_t
constexpr constexpr_str_t(const char_T *str, size_t size)
range_n::match_pattern< const char_T > match_pattern
constexpr constexpr_str_t(const char_T *str)
constexpr hash_t hash() const noexcept
constexpr constexpr_str_view_t substr(const char_T *begin) const noexcept
constexpr const char_T * data() const noexcept
constexpr constexpr_str_view_t substr(size_t pos, size_t len) const noexcept
constexpr constexpr_str_view_t substr(const char_T *begin, size_t len) const noexcept
constexpr const char_T * str() const noexcept
constexpr constexpr_str_view_t substr(size_t pos, const char_T *end) const noexcept
constexpr constexpr_str_view_t substr(size_t pos) const noexcept
constexpr_str_view_t(const char_T *str) noexcept=delete
string_view_t< char_T > base_t
constexpr constexpr_str_view_t substr(const char_T *begin, const char_T *end) const noexcept
constexpr data_view(const T *p)
constexpr data_view(T *p)
constexpr bool operator()(T *a, end_by_zero_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, U *b, size_t size) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, just_an_part_t, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, U *b, end_by_zero_t) const noexcept(nothrow< T, U >)
static constexpr bool able
constexpr bool operator()(T *a, end_by_zero_t, U *b, size_t size2) const noexcept(nothrow< T, U >)
constexpr bool operator()(T *a, size_t size1, U *b, size_t size2) const noexcept(nothrow< T, U >)
static constexpr bool nothrow
constexpr bool operator()(T(&a)[N1], U(&b)[N2]) const noexcept(nothrow< T, U >)
constexpr auto operator()(T &&a, U &&b) const noexcept(nothrow< T, U >)
auto & get_data() noexcept
~function_data_warpper_t() noexcept(destruct.nothrow< T >)=default
function_data_warpper_t(T a) noexcept(construct< T >.nothrow< T >)
Ret_t operator()(Args_t...args) const noexcept(nothrow||invoke< const T >.nothrow< Args_t... >)
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
Ret_t(Args_t...) noexcept(nothrow) type
decltype(function_type_getter_conditional_helper< T >()) ::template type type
constexpr hash_base_t get_hash_in_base_type(const T &a) const noexcept(nothrow< T >)
constexpr hash_value_t repeat_times(hash_value_t value, size_t size) const noexcept
constexpr hash_value_t repeat_times(T &&value, size_t size) const noexcept
constexpr hash_value_t with_calculated_before(hash_value_t before, size_t before_size, const T *a, size_t size) const noexcept
hash_value_t merge_array_hash_results(hash_value_t before, size_t before_size, hash_value_t after, size_t after_size) const noexcept
constexpr hash_value_t with_calculated_before(hash_value_t before, size_t before_size, const array_like_view_t< T >a) const noexcept
static constexpr bool nothrow_helper() noexcept
static constexpr bool able_helper() noexcept
constexpr hash_base_t operator%(auto &&a) const noexcept
constexpr bool operator==(const hash_value_t &a) const noexcept
unstable_hash_value_t(const hash_value_t &a) noexcept
auto _as(Args &&...rest) const noexcept(nothrow< Args... >)
base_iterator_t< value_t, base_t_w > this_t
constexpr this_t operator+(ptrdiff_t num) const noexcept(noexcept((this_t(--(::std::declval< this_t & >())),++(::std::declval< this_t & >()))))
constexpr this_t operator-(ptrdiff_t num) const noexcept(noexcept(((::std::declval< this_t & >())+0)))
constexpr this_t operator++(int) &noexcept(noexcept((this_t(++(::std::declval< this_t & >())))))
constexpr this_t & operator--() &noexcept(is_before_getter_noexcept())
constexpr this_t & operator++() &noexcept(is_next_getter_noexcept())
same_base_t< value_t, base_t_w > base_t
constexpr this_t & operator=(const base_t_rw &a) &noexcept(copy_assign.nothrow< base_t_rw >)
constexpr this_t & operator=(base_t_rw &&a) &noexcept(move_assign.nothrow< base_t_rw >)
remove_cv< base_t_w > base_t_rw
constexpr this_t operator--(int) &noexcept(noexcept((this_t(--(::std::declval< this_t & >())))))
remove_cv< base_t_w > base_t_rw
constexpr reverse_base_t(build_base_t_T &&a) noexcept(construct< base_t_rw >.nothrow< build_base_t_T >)
auto get_handle() noexcept(noexcept(((::std::declval< base_t_w >()).get_handle())))
reverse_base_t< base_t_w > this_t
auto get_next() noexcept(noexcept(((::std::declval< base_t_w >()).get_before())))
auto get_before() noexcept(noexcept(((::std::declval< base_t_w >()).get_next())))
constexpr logical_bool(bool a)
constexpr logical_bool(const logical_bool &)=default
constexpr logical_bool(special_init_t, bool is_true, bool is_false, bool is_unknown=0)
friend logical_bool operator&&(logical_bool a, logical_bool b) noexcept
constexpr logical_bool operator!() const
friend logical_bool operator||(logical_bool a, logical_bool b) noexcept
constexpr logical_bool & operator=(const logical_bool &) &=default
friend logical_bool operator==(logical_bool a, logical_bool b) noexcept
rounding_auto_setter(int new_rounding)
constexpr auto operator()(::std::initializer_list< T >l) const
constexpr auto operator()(Args &&...rest) const
constexpr auto operator()(type_info_t< T >) const
constexpr auto operator()(::std::initializer_list< T >l) const
constexpr auto operator()(Args &&...rest) const
constexpr auto operator()(type_info_t< T >) const
constexpr non_copy_assign_able() noexcept=default
constexpr non_copy_construct_able(non_copy_construct_able &&)=default
constexpr non_copy_construct_able()=default
constexpr non_copy_construct_able(const non_copy_construct_able &)=delete
constexpr non_default_construct_able()=delete
constexpr non_move_assign_able() noexcept=default
constexpr non_move_construct_able(const non_move_construct_able &)=default
constexpr non_move_construct_able()=default
constexpr non_move_construct_able(non_move_construct_able &&)=delete
constexprauto base_get() const noexcept
bitmark_for_finds() noexcept=default
constexpr bool mark(array_like_view_t< T >pattern) noexcept
constexpr bool operator[](T &index) const noexcept
constexpr T * match(array_like_view_t< T >range) const noexcept
array_like_view_t< T > _pattern
constexpr void build_table(array_like_view_t< T >pattern) noexcept
constexpr match_pattern(array_like_view_t< T >pattern) noexcept
static constexpr index_type get_index_of(T &ch) noexcept
constexpr range_t(note::from_t< const T >begin, note::to_t< const T >end)
constexpr auto end() noexcept
constexpr auto begin() noexcept
constexpr range_t(note::to_t< const T >end, note::from_t< const T >begin)
constexpr range_t(const T begin, note::size_t< const T >size)
constexpr size_t size() noexcept
constexpr auto begin() const noexcept
constexpr auto end() const noexcept
constexpr range_t(const T begin, note::size_t< size_t >size)
constexpr range_t(const T begin, const T end)
constexpr T * match(array_like_view_t< T >range) const noexcept
array_like_view_t< T > _pattern
constexpr reverse_match_pattern(array_like_view_t< T >pattern) noexcept
static constexpr index_type get_index_of(T &ch) noexcept
constexpr void build_table(array_like_view_t< T >pattern) noexcept
constexpr string_view_t substr(const char_T *begin) const noexcept
constexpr const char_T * str() const noexcept
constexpr size_t find_last_not_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find_first_not_of(string_view_t str) const
constexpr size_t reverse_find(string_view_t str) const
constexpr size_t find_last_not_of(string_view_t str) const
constexpr size_t find_last_of(const constexpr_str_t< char_T > &str) const
array_like_view_t< const char_T > base_t
constexpr size_t find_first_of(string_view_t str) const
constexpr string_view_t substr(const char_T *begin, size_t len) const noexcept
constexpr size_t reverse_find(const char_T ch) const
constexpr string_view_t(const char_T *str) noexcept
constexpr size_t find_first_not_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find_last_of(const char_T ch) const
constexpr size_t find_last_of(string_view_t str) const
constexpr string_view_t substr(const char_T *begin, const char_T *end) const noexcept
constexpr size_t reverse_find(const constexpr_str_t< char_T > &str) const
constexpr size_t find(string_view_t str) const
constexpr string_view_t substr(size_t pos) const noexcept
constexpr size_t find_first_not_of(const char_T ch) const
constexpr string_view_t substr(size_t pos, size_t len) const noexcept
constexpr string_view_t substr(size_t pos, const char_T *end) const noexcept
constexpr size_t find_first_of(const constexpr_str_t< char_T > &str) const
constexpr size_t find(const constexpr_str_t< char_T > &str) const
constexpr size_t find_first_of(const char_T ch) const
constexpr size_t find_last_not_of(const char_T ch) const
constexpr size_t find(const char_T ch) const
constexpr const char_T * data() const noexcept
type_name_t get_name() const noexcept
static constexpr bool not_has_has_attribute_helper()
constexpr bool operator==(const ::std::type_info &a) const noexcept
constexpr type_info_t() noexcept
constexpr type_info_t(const type_info_t &) noexcept=default
static constexpr bool has_attribute_helper()
type_name_t(const type_name_t &other) noexcept
string_view_t< char > base_t
type_name_t(const char *original_name) noexcept
static base_t demangle(const char *original_name) noexcept
type_name_t(type_name_t &&other) noexcept
static base_t copy_demangle(base_t demangled_name) noexcept
virtual func_ptr_t get_func_ptr() const noexcept
comn_ptr_t< this_t > ptr_t
virtual Ret_t call(Args_t...)=0
base_func_data_t< Ret_t(Args_t...)> this_t
bool operator==(const T &a) const
virtual ~base_func_data_t()=default
virtual base_type_info_t get_type_info() const noexcept=0
this_t & operator=(nullptr_t) &noexcept(promise_nothrow_at_destruct)
base_function_t(base_t::ptr_t a) noexcept
function_data_saver_t< Ret_t(Args_t...)> base_t
~base_function_t() noexcept(promise_nothrow_at_destruct)=default
base_function_t(const this_t &a) noexcept
base_function_t(func_ptr_t a) noexcept
Ret_t operator()(Args_t...args) const noexcept(nothrow)
base_function_t() noexcept=default
this_t & operator=(const T &a) &noexcept(promise_nothrow_at_destruct)
base_function_t(T &&a) noexcept(get_data_nothrow< T >)
comn_ptr_t< base_t_w > ptr_t
base_function_t(null_ptr_t) noexcept
base_function_t(this_t &&a) noexcept
void swap_with(this_t &a) noexcept
base_function_t(nullptr_t) noexcept
virtual Ret_t call(Args_t...) noexcept(noexcept((Ret_t()))) override final
virtual base_type_info_t get_type_info() const noexcept override final
virtual ~default_func_data_t() noexcept override final
virtual void throw_self_ptr() const override final
base_func_data_t< Ret_t(Args_t...)> base_t
virtual void throw_self_ptr() override final
virtual const void * get_data_begin() const noexcept override final
virtual bool equal_with(const void *) const noexcept override final
virtual bool equal_with(const void *a) const noexcept(equal.able< T >?equal.nothrow< T >:true) override final
virtual void throw_self_ptr() const override final
virtual func_ptr_t get_func_ptr() const noexcept override final
virtual base_type_info_t get_type_info() const noexcept override final
bool is_unique() const noexcept
virtual ~func_data_t() override=default
base_func_data_t< Ret_t(Args_t...)> base_t
func_data_t< T, Ret_t(Args_t...)> this_t
function_data_warpper_t< T, Ret_t(Args_t...)> data_t
virtual void throw_self_ptr() override final
virtual const void * get_data_begin() const noexcept override final
virtual Ret_t call(Args_t...args) noexcept(invoke< T >.nothrow< Args_t... >) override final
base_t::func_ptr_t func_ptr_t
constexpr seek_value_t(const T &a)
bool operator==(const data_t &a) const noexcept(noexcept((a._value==*_m)))
auto_stack_t(base_t &&a) noexcept(noexcept((base_t(a))))
this_t & operator=(this_t &&a) &noexcept
auto_stack_t(const base_t &a) noexcept(noexcept((base_t(a))))
maybe_fail_reference< T > find(U &&a) noexcept(noexcept(((::std::declval< T & >())==a)))
bool in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).find(a).not_fail())))
bool not_in_stack(const T &a) const noexcept(noexcept(((::std::declval< this_t >()).in_stack(a))))
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual void clear() noexcept override
function_t< value(ptr)> _func
base_binary_function_node(function_t< void(ptr)> func) noexcept
virtual base_type_info_t get_type_info() const noexcept override
base_binary_function_node(function_t< value(ptr)> func) noexcept
virtual value be_call(ptr arg_list) override
base_binary_function_node(function_t< void()> func) noexcept
base_binary_function_node this_t
virtual value arec(const value index) override
virtual base_type_info_t get_type_info() const noexcept override
virtual constexpr size_t eq_level() const noexcept override
virtual constexpr size_t equal_level() const noexcept override
virtual constexpr ~base_constexpr_t() noexcept override=default
base_constexpr_t() noexcept
virtual void clear() noexcept override final
virtual void be_replace_as(ptr) noexcept override
virtual base_type_info_t get_type_info() const noexcept override final
virtual base_type_info_t get_additional_type_info() const noexcept=0
binary_node_base_t this_t
virtual void throw_self_ptr() override
virtual value arec(const value index) noexcept(arec_nothrow_helper) override
binary_node_t(const T &a) noexcept
virtual void throw_self_ptr() const override
binary_node_t(T &&a) noexcept
binary_node_t< T > this_t
virtual base_type_info_t get_additional_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
binary_node_base_t base_t
virtual logical_bool eq_with(const_ptr a) const noexcept override
virtual void clear() noexcept(clear_nothrow_helper) override
virtual value be_eval() override
virtual base_type_info_t get_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
map_t< value, const_weak_ptr > _m
virtual void clear() noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual value arec(const value index) override
virtual value arec(const value index) override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual void clear() noexcept override
constexpr base_t() noexcept
virtual value be_eval() override
virtual base_type_info_t get_type_info() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
const_ptr operator&() const noexcept
value operator()(Args &&...rest)
virtual base_type_info_t get_type_info() const noexcept=0
virtual constexpr size_t eq_level() const noexcept
virtual constexpr size_t equal_level() const noexcept
virtual void waiting_for_destroy() noexcept
virtual void be_replace_as(ptr a) noexcept
node_like() noexcept=default
virtual ~node_like()=default
virtual value arec(const value)=0
logical_bool operator==(const this_t &a) const noexcept
value operator[](auto &&index)
virtual void clear() noexcept=0
logical_bool eq(const_ptr a) const noexcept
logical_bool equal(const_ptr a) const noexcept
virtual void be_replace_as(ptr) noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual ~base_data_t() noexcept=default
base_data_t() noexcept=default
virtual base_type_info_t get_type_info() const noexcept override final
constexpr_data_t(const constexpr_data_t &) noexcept=default
virtual ~constexpr_data_t() noexcept override final=default
virtual ptr get_value() noexcept override final
virtual base_data_t * copy() const noexcept override final
constexpr_data_t(ptr a) noexcept
virtual ~null_data_t() noexcept override final=default
virtual base_type_info_t get_type_info() const noexcept override final
virtual ptr get_value() noexcept override final
virtual base_data_t * copy() const noexcept override final
virtual base_type_info_t get_type_info() const noexcept override final
variable_data_t(const variable_data_t &) noexcept=default
virtual ptr get_value() noexcept override final
virtual ~variable_data_t() noexcept override final=default
virtual base_data_t * copy() const noexcept override final
variable_data_t(ptr a) noexcept
value(this_t &&a) noexcept=default
value(const this_t &a) noexcept=default
value(node_like *a) noexcept
auto operator!=(auto &&a) const
this_t & operator>>(this_t a) noexcept
auto operator[](T &&index)
const_ptr operator&() const
constexpr value(special_init_t) noexcept
~value() noexcept=default
void re_ref_to(this_t a) noexcept
auto operator==(auto &&a) const noexcept
value(base_data_t *a) noexcept
void ref_to(this_t a) noexcept
this_t & operator=(auto &&a)
virtual constexpr size_t eq_level() const noexcept override
virtual base_type_info_t get_type_info() const noexcept override
virtual constexpr size_t equal_level() const noexcept override
virtual logical_bool equal_with(const_ptr a) const noexcept override
constexpr library_info_t(special_init_t) noexcept
~library_info_t() noexcept
void * get_symbol(string symbol_name) noexcept
symbol_t & get_symbol_as(string symbol_name) noexcept
library_info_t(string lib_name) noexcept
string get_name() noexcept
string get_error() noexcept
symbol_t(library_handle_t lib, string symbol_name, Ret_t(*self)(Args_t...) noexcept(nothrow)) noexcept
T * operator()() const noexcept
T * operator()() const noexcept
static T * base_call(size_t size) noexcept
constexpr alloc_array_t operator[](size_t a) const noexcept
static T * base_call() noexcept
T * operator()(size_t size) const noexcept
static T * base_call(const T *arg) noexcept(nothrow< T >)
T * operator()(const T *arg) const noexcept(nothrow< T >)
static void base_call(T *p) noexcept
void operator()(T *p) const noexcept
static size_t base_call(const T *arg) noexcept(nothrow< T >)
size_t operator()(const T *arg) const noexcept(nothrow< T >)
static constexpr bool nothrow
T * operator()(T *&ptr) const noexcept
constexpr realloc_array_t operator[](size_t a) const noexcept
static void base_call(T *&ptr, size_t nsize) noexcept
void operator()(T *&ptr, size_t nsize) const noexcept
mark_able_for_gc(const mark_able_for_gc &) noexcept
mark_able_for_gc() noexcept
static constexpr bool able
static constexpr bool nothrow
static T * base_call(const T *arg) noexcept(nothrow< T >)
T * operator()(const T *arg) const noexcept(nothrow< T >)
static constexpr bool nothrow
static void base_call(T *&arg, const size_t to_size) noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr struct elc::defs::memory::get_n::get_forward_resize_t::insert_resize_t insert_with_resize
static constexpr bool able
void operator()(T *&arg, size_t to_size) const noexcept(nothrow< T >)
T * operator()(T *&&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr bool able
static constexpr struct elc::defs::memory::get_n::get_resize_t::insert_resize_t insert_with_resize
static void base_call(T *&arg, const size_t to_size) noexcept(nothrow< T >)
T * operator()(T *&&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr bool nothrow
void operator()(T *&arg, size_t to_size) const noexcept(nothrow< T >)
static constexpr struct elc::defs::memory::get_n::get_resize_t::insert_t insert
static size_t base_call(const T *arg) noexcept(nothrow< T >)
size_t operator()(const T *arg) const noexcept(nothrow< T >)
T * operator()(note::to_t< T *& > to, const T &a) const noexcept(nothrow< void >)
T * operator()(note::to_t< T *& > to, array_like_view_t< const T >a) const noexcept(nothrow< void >)
T * operator()(note::to_t< T *& > to, T &&a) const noexcept(nothrow< void >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(array_like_view_t< const T >a) const noexcept(nothrow< void >)
bool operator()(array_like_view_t< const T >a, note::from_t< T * >from) const noexcept(nothrow< void >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
constexpr array_get_t operator[](size_t size) const noexcept
void operator()(T *a) const noexcept(nothrow< T >)
static constexpr bool nothrow
void operator()(T *a, decltype(destruct)::not_t) const noexcept(nothrow< T >)
T * operator()(const T &v) const noexcept(nothrow< const T & >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()() const noexcept(nothrow<>)
constexpr void never_in_array_check() const noexcept
void base_call(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()() const noexcept(nothrow<>)
constexpr array_construct_t operator[](size_t size) const noexcept
void base_call(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(Args &&...rest) const noexcept(nothrow< Args... >)
T * operator()(const T &v) const noexcept(nothrow< const T & >)
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
T * operator()(const T &from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, const T &from) const noexcept(nothrow< T >)
static constexpr bool trivial
static T * base_call(T *to, const T &from, size_t size) noexcept(nothrow< T >)
static constexpr bool able
static T * base_call(T *to, const T *from, size_t size) noexcept(nothrow< T >)
static T & base_call(T &a, const T &b) noexcept(nothrow< T >)
static constexpr bool nothrow
T & operator()(T &a, const T &b) const noexcept(nothrow< T >)
constexpr array_copy_assign_t operator[](size_t a) const noexcept
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(T *to, const T &from) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
static constexpr bool able
T * operator()(T *to, const T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< const T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, const T *from) noexcept(nothrow< T >)
T * operator()(T *to, const T &from) const noexcept(nothrow< T >)
static T * base_call(T *to, const T &from, size_t size) noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from) const noexcept(nothrow< T >)
static T * base_call(T *to, const T &from) noexcept(nothrow< T >)
static constexpr bool trivial
T * operator()(T *to, const T *from, size_t size) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< const T * >from, size_t size) const noexcept(nothrow< T >)
static T * base_call(T *to, const T *from, size_t size) noexcept(nothrow< T >)
constexpr array_copy_construct_t operator[](size_t a) const noexcept
static constexpr bool nothrow
T * operator()(note::from_t< const T * >from, note::to_t< T * >to, size_t size) const noexcept(nothrow< T >)
void operator()(T *begin) const noexcept(nothrow< T >)
static void base_call(T *to) noexcept(nothrow< T >)
constexpr array_destruct_t operator[](size_t size) const noexcept
constexpr not_t operator!() const noexcept
static constexpr bool trivial
static constexpr bool nothrow
static void base_call(T *begin, size_t size) noexcept(nothrow< T >)
static constexpr bool able
void operator()(T *begin) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static T & base_call(T &a, T &&b) noexcept(nothrow< T >)
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
constexpr array_move_assign_t operator[](size_t a) const noexcept
static constexpr bool nothrow
T & operator()(T &a, T &b) const noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
constexpr array_move_construct_t operator[](size_t a) const noexcept
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static constexpr bool able
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, T *from) noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
static constexpr bool trivial
static constexpr bool nothrow
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
T * operator()(note::from_t< T * >from, note::to_t< T * >to) const noexcept(nothrow< T >)
static T * base_call(T *to, T *from, size_t size) noexcept(nothrow< T >)
static T * base_call(T *to, T *from) noexcept(nothrow< T >)
T * operator()(note::to_t< T * >to, note::from_t< T * >from) const noexcept(nothrow< T >)
static constexpr bool trivial
T * operator()(T *to, T *from) const noexcept(nothrow< T >)
static constexpr bool nothrow
static constexpr bool able
constexpr remove_ref< T > && operator()(T &&a) const noexcept
constexpr array_move_t operator[](size_t a) const noexcept
T * operator()(Args &&...rest) const noexcept(nothrow< T, Args... >)
constexpr array_re_construct_t< T > operator[](size_t size) const noexcept
T * operator()(Args &&...rest) const noexcept(nothrow< T, Args... >)
T * operator()(T *to) const noexcept(nothrow< T >)
constexpr placement_re_construct_t< T > operator[](T *p) const noexcept
T & operator*() const noexcept(get_nothrow)
base_ptr_t & operator=(const same_ptr &a) &noexcept(reset_nothrow &&get_nothrow)
base_ptr_t & operator=(const base_ptr_t &a) &noexcept(reset_nothrow &&get_nothrow)
base_ptr_t & operator=(null_ptr_t) &noexcept(reset_nothrow)
T * operator->() const noexcept(get_nothrow)
ptr_t< T, ref_type, do_replace_check > base_t
base_ptr_t(base_ptr_t &a) noexcept
base_ptr_t & operator=(nullptr_t) &noexcept(reset_nothrow)
auto operator!() const noexcept(get_nothrow)
base_ptr_t< T, ref_type, do_replace_check > this_t
base_ptr_t & operator=(same_ref &&a) &noexcept
base_ptr_t(base_ptr_t &&a) noexcept
base_ptr_t & operator=(base_ptr_t &&a) &noexcept
base_ptr_t & operator=(T *a) &noexcept(reset_nothrow)
void do_replace(T *p) noexcept(replace_check_nothrow &&reset_nothrow)
auto operator==(nullptr_t) const noexcept(noexcept((operator==(null_ptr))))
auto operator==(const ptr_t< T, ref_type_, do_replace_check_ > &b) const noexcept(noexcept((pointer_equal((::std::declval< const this_t & >()).get(), b.get()))))
bool unique() const noexcept
constexpr ptr_t(nullptr_t=nullptr) noexcept
constexpr conditional< do_replace_check &&type_info< T >. template has_attribute_helper< replace_able >(), unstable_hash_t, hash_t > hash() const noexcept(noexcept((elc::defs::hash(get()))))
ptr_t(const same_ref &a) noexcept
constexpr ptr_t(null_ptr_t) noexcept
same_ref_p_t< T, ref_type > same_ref
ptr_t(const same_ptr &a) noexcept
void reset(T *a) const noexcept(reset_nothrow)
void replace_check() const noexcept(replace_check_nothrow)
ptr_t(ptr_t &&a) noexcept
ptr_t(T *a, special_init_t) noexcept
same_ptr_p_t< T > same_ptr
auto operator==(null_ptr_t) const noexcept(noexcept((operator==((T *) null_ptr))))
ptr_t(const ptr_t &a) noexcept
~ptr_t() noexcept(cut_nothrow)
void do_replace(const ptr_t< T, ref_type_, do_replace_check_ > &p) noexcept(replace_check_nothrow &&reset_nothrow)
void reset(nullptr_t=nullptr) const noexcept(reset_nothrow)
auto operator==(const T *a) const noexcept(noexcept((pointer_equal(add_const((::std::declval< const this_t & >()).get()), a))))
ptr_t< T, ref_type, do_replace_check > this_t
constexpr ptr_t(T *a) noexcept
same_ref_p_t< T, ref_type > base_t
T * get() const noexcept(get_nothrow)
ptr_t(const ptr_t< remove_cv< T >, ref_type, do_replace_check > &a) noexcept
virtual T & get() noexcept override
virtual void map_and_mark() noexcept override
same_ptr_p_t(const same_ptr_p_t &) noexcept=default
same_ptr_p_t(T *a) noexcept
void add_ref() const noexcept
static void cut_ref(T *a) noexcept(cut_nothrow)
void swap_with(same_ref_p_t &a) noexcept
same_ref_p_t(const same_ptr_p_t< T > &a) noexcept
void cut_ref() const noexcept(noexcept((cut_ref(nullptr))))
same_ref_p_t(T *a) noexcept
static void add_ref(T *a) noexcept
constexpr void be_replace_as(T *new_p) noexcept
constexpr ~replace_able() noexcept
constexpr void be_replace_as(nullptr_t) noexcept
constexpr bool replaced() const noexcept
constexpr T * get_ptr() const noexcept
constexpr replace_able() noexcept
void inter_namespace(const value namespace_name)
bool has_symbol(auto &&index)
void inter_namespace(auto &&index)
value get_symbol_type_map(ptr thenamespace)
ptr get_symbol_namespace(auto &&index)
ptr get_symbol_namespace(const value index)
value get_symbol(const value index)
value get_symbol(auto &&index)
bool has_symbol(const value index)
value get_symbol_type(auto &&index)
value get_symbol_type(const value index)
library_handle_t package_symbol_loader_handle
ptr get_load_error() noexcept
~package_symbol_loader_t() noexcept=default
function_t< ptr(string lib_name, size_t lib_ver, string symbol_name) noexcept > load_interface
size_t read(T *v, size_t size=1)
virtual ~base_istream()=default
virtual size_t read(byte *buf, size_t size)=0
void write(const T *v, size_t size=1)
virtual void write(const byte *buf, size_t size)=0
virtual ~base_ostream()=default
virtual ~base_stream()=default
virtual void seek_to(void *)=0
virtual void * seek(seek_type, int_t)=0
virtual void flush() noexcept override
virtual void sync() noexcept override
virtual void seek_to(void *p) noexcept override
virtual void close() noexcept override
size_t bufsize() const noexcept
virtual void write(const byte *buf, size_t size) noexcept override
~memory_stream() noexcept
virtual void * seek(seek_type st, int_t offsize) noexcept override
virtual size_t read(byte *buf, size_t size) noexcept override
virtual size_t read(byte *buf, size_t size) noexcept override=0
size_t read(T *v, size_t size=1) noexcept
void write(const T *v, size_t size=1) noexcept
virtual void write(const byte *buf, size_t size) noexcept override=0
virtual ~noexcept_stream() noexcept override=default
virtual void sync() noexcept override=0
virtual void seek_to(void *) noexcept override=0
virtual compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >)=0
base_string_data_t() noexcept=default
static void be_replace(this_t *a, ptr_t b) noexcept(ptr_reset_nothrow)
compare_t::type< char_T > compare_type
compare_type compare_with(ptr_t with) noexcept(compare.nothrow< char_T >)
static void be_replace(ptr_t &a, ptr_t b) noexcept(ptr_reset_nothrow)
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >)=0
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow)=0
virtual bool same_struct(ptr_t) noexcept=0
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow)
bool positive_gc_profit() noexcept
base_string_data_t< char_T > this_t
bool is_unique() noexcept
virtual float_size_t get_base_memory_cost() noexcept=0
hash_t get_hash(ptr_t &p) noexcept(hash_nothrow)
comn_ptr_t< this_t > ptr_t
bool equal_with(ptr_t with) noexcept(equal.nothrow< char_T >)
compare_type compare_with(ptr_t with, size_t pos, size_t size) noexcept(compare.nothrow< char_T >)
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow)=0
virtual ~base_string_data_t() noexcept(destruct_nothrow)=default
void self_changed() noexcept
bool has_hash_cache() noexcept
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept=0
compare_type default_compare_method(ptr_t with) noexcept(compare.nothrow< char_T >)
bool equal_with(const char_T *with) noexcept(equal.nothrow< char_T >)
bool equal_with(ptr_t with, size_t pos, size_t size) noexcept(equal.nothrow< char_T >)
string_view_t< char_T > string_view_t
hash_t get_others_hash_with_calculated_before(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept(hash_nothrow)
hash_t get_hash_cache() noexcept
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept(hash_nothrow)
virtual char_T * get_c_str(ptr_t &) noexcept(get_data_nothrow)
virtual hash_t get_hash_detail(ptr_t &p) noexcept(hash_nothrow)
virtual size_t get_size() noexcept=0
void reset_hash_cache() noexcept
static void equivalent_optimization(auto &&a, auto &&b) noexcept(ptr_reset_nothrow)
virtual const char_T * get_data(ptr_t &p) noexcept(get_data_nothrow)
compare_type compare_with(string_view_t with) noexcept(compare.nothrow< char_T >)
hash_t set_hash_cache(hash_t value) noexcept
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow)
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow)
bool default_equal_method(ptr_t with) noexcept(equal.nothrow< char_T >)
bool same_type(ptr_t a) noexcept
bool equal_with(string_view_t with) noexcept(equal.nothrow< char_T >)
compare_type compare_with(const char_T *with) noexcept(compare.nothrow< char_T >)
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
comn_string_data_t(ptr_t str, size_t pos, size_t size) noexcept(construct_nothrow &©_assign_nothrow)
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
comn_string_data_t< char_T > this_t
virtual bool same_struct(ptr_t) noexcept override final
comn_ptr_t< this_t > ptr_t
void self_changed() noexcept
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
comn_string_data_t(size_t size) noexcept(construct_nothrow &©_assign_nothrow)
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
string_view_t< char_T > string_view_t
comn_string_data_t(string_view_t str) noexcept(construct_nothrow &©_assign_nothrow)
void clear_match_pattern() noexcept
base_string_data_t< char_T > base_t
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual size_t get_size() noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual char_T * get_c_str(ptr_t &) noexcept override final
comn_string_data_t(size_t size, char_T ch) noexcept(construct_nothrow &©_assign_nothrow)
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual ~comn_string_data_t() noexcept(destruct_nothrow) override final
virtual char_T * get_unique_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
comn_string_data_t(ptr_t str) noexcept(construct_nothrow &©_assign_nothrow)
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual const range_n::match_pattern< const char_T > & get_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual const char_T * get_const_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual const char_T * get_data(ptr_t &) noexcept(get_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual size_t get_size() noexcept override final
constexpr_string_data_t(const constexpr_str_t< char_T > &str) noexcept
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual const range_n::reverse_match_pattern< const char_T > & get_reverse_match_pattern_from_self(ptr_t &self) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
string_view_t< char_T > string_view_t
constexpr_string_data_t(string_view_t str) noexcept
constexpr_string_data_t< char_T > this_t
base_string_data_t< char_T > base_t
virtual ~constexpr_string_data_t() noexcept(destruct_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void clear_match_pattern() noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
end_apply_string_data_t< char_T > this_t
comn_ptr_t< this_t > ptr_t
end_apply_string_data_t(ptr_t str, size_t count) noexcept
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
base_string_data_t< char_T > base_t
string_view_t< char_T > string_view_t
virtual char_T * get_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
end_apply_string_data_t(ptr_t str, size_t count, char_T ch) noexcept
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
void shrink() noexcept(_m.resize_nothrow)
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
end_apply_string_data_t(ptr_t str, string_view_t end) noexcept(construct_nothrow &©_assign_nothrow)
virtual size_t get_size() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
comn_ptr_t< this_t > ptr_t
erased_string_data_t< char_T > this_t
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
string_view_t< char_T > string_view_t
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void null_equivalent_check() noexcept
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
erased_string_data_t(ptr_t str, size_t erase_pos, size_t erase_size) noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual size_t get_size() noexcept override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
head_apply_string_data_t(ptr_t str, string_view_t head) noexcept(construct_nothrow &©_assign_nothrow)
virtual bool same_struct(ptr_t with) noexcept override final
comn_ptr_t< this_t > ptr_t
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
void shrink() noexcept(_m.forward_resize_nothrow)
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
string_view_t< char_T > string_view_t
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
head_apply_string_data_t< char_T > this_t
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual char_T * get_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(copy_construct_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
string_view_t< char_T > string_view_t
base_string_data_t< char_T > base_t
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
inserted_string_data_t(ptr_t to, ptr_t insert_data, size_t insert_pos) noexcept
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t index) noexcept override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
inserted_string_data_t< char_T > this_t
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual hash_t get_hash_detail(ptr_t &p) noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept override final
virtual size_t get_size() noexcept override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &p, size_t pos, size_t size) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual char_T * get_c_str(ptr_t &) noexcept override final
null_string_data_t() noexcept
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
null_string_data_t< char_T > this_t
comn_ptr_t< this_t > ptr_t
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_erase(size_t pos, size_t size) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept override final
virtual ptr_t do_insert(size_t pos, string_view_t str) noexcept(construct_nothrow &©_assign_nothrow) override final
string_view_t< char_T > string_view_t
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual ptr_t do_insert(size_t pos, ptr_t str) noexcept override final
virtual char_T arec(size_t index) noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept override final
virtual bool same_struct(ptr_t) noexcept override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual size_t get_size() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
comn_ptr_t< this_t > ptr_t
base_string_data_t< char_T > base_t
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
same_value_compress_string_data_t(size_t size, char_T value) noexcept
virtual ptr_t do_pop_front(size_t size, ptr_t &) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
same_value_compress_string_data_t< char_T > this_t
virtual ptr_t do_pop_back(size_t size, ptr_t &) noexcept(construct_nothrow &©_assign_nothrow) override final
substr_string_data_t(ptr_t str, size_t sub_begin, size_t sub_size) noexcept
virtual const char_T * get_const_c_str(ptr_t &p) noexcept(get_data_nothrow) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual const char_T * get_data(ptr_t &) noexcept(get_data_nothrow) override final
void null_equivalent_check() noexcept
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
substr_string_data_t< char_T > this_t
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
string_view_t< char_T > string_view_t
virtual size_t get_size() noexcept override final
virtual bool same_struct(ptr_t with) noexcept override final
base_string_data_t< char_T > base_t
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual ptr_t apply_str_to_end(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual char_T arec(size_t index) noexcept(copy_construct_nothrow &&move_construct_nothrow) override final
virtual ptr_t do_pop_back(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
sum_string_data_t(ptr_t before, ptr_t after) noexcept
sum_string_data_t< char_T > this_t
virtual ptr_t apply_str_to_end(ptr_t str) noexcept(apply_data_nothrow) override final
comn_ptr_t< this_t > ptr_t
virtual hash_t get_others_hash_with_calculated_before_detail(hash_t before, size_t before_size, ptr_t &, size_t pos, size_t size) noexcept(hash_nothrow) override final
virtual bool same_struct(ptr_t with) noexcept override final
virtual ptr_t do_pop_front(size_t size, ptr_t &self) noexcept(construct_nothrow &©_assign_nothrow) override final
virtual ptr_t apply_str_to_begin(string_view_t str) noexcept(copy_construct_nothrow &&apply_data_nothrow) override final
virtual void be_replace_as(ptr_t a) noexcept(clear_nothrow) override final
virtual hash_t get_hash_detail(ptr_t &) noexcept(hash_nothrow) override final
string_view_t< char_T > string_view_t
virtual bool same_struct_equal(ptr_t with) noexcept(equal.nothrow< char_T >) override final
virtual ptr_t apply_str_to_begin(ptr_t str) noexcept(apply_data_nothrow) override final
virtual base_t::compare_type same_struct_compare(ptr_t with) noexcept(compare.nothrow< char_T >) override final
virtual range_t< const char_T * > get_the_largest_complete_data_block_begin_form(size_t begin) noexcept override final
virtual float_size_t get_base_memory_cost() noexcept override final
virtual void arec_set(size_t index, char_T a, ptr_t &p) noexcept(copy_assign_nothrow &&move_construct_nothrow) override final
virtual size_t get_size() noexcept override final
virtual void copy_part_data_to(char_T *to, size_t pos, size_t size) noexcept(copy_assign_nothrow) override final
base_string_data_t< char_T > base_t
virtual ptr_t get_substr_data(size_t begin, size_t size) noexcept override final
void push_front(string_view_t str) &noexcept
string_t & operator=(string_t &&str) noexcept
size_t find(const string_t &str, size_t begin=0) const noexcept(find_nothrow)
constexpr bool ends_with(const char_T *str) const noexcept
void arec_set(size_t index, char_T a) noexcept
float_size_t memory_cost() const noexcept
string_t arec(size_t index, constexpr_str_t &delimiter_str) const
size_t find_first_of(const string_t &str) const noexcept(find_nothrow)
string_t(string_view_t str) noexcept
size_t size() const noexcept
string_t & operator=(const string_t &str) noexcept
size_t reverse_find(const char_T ch) const noexcept(find_nothrow)
constexpr bool starts_with(constexpr_str_t &str) const noexcept
string_t operator+(const string_t &str) const noexcept
string_t & operator+=(string_view_t str) &noexcept
size_t find_last_of(const string_t &str) const noexcept(find_nothrow)
size_t find_last_of(const arec_t &&ch) const noexcept(find_nothrow)
constexpr auto operator<=>(string_view_t a) const noexcept(compare.nothrow< char_T >)
reverse_iterator_t< char_T, iterator_base_t > reverse_iterator
char_T pop_front() noexcept
constexpr auto operator<=>(const char_T *a) const noexcept(compare.nothrow< char_T >)
const char_T * data() const noexcept
constexpr bool ends_with(constexpr_str_t &str) const noexcept
char_T * writeable_data() noexcept
const_iterator cbegin() const noexcept
size_t find_first_not_of(char_T ch) const noexcept(find_nothrow)
constexpr auto operator==(const char_T *a) const noexcept(equal.nothrow< char_T >)
void push_front(const arec_t &&ch) &noexcept
size_t find_last_not_of(const arec_t &&ch) const noexcept(find_nothrow)
void resize(size_t nsize) noexcept
const arec_t front() const noexcept
size_t find_last_of(constexpr_str_t &str) const noexcept(find_nothrow)
this_t & append(size_t size, char_T ch) noexcept
constexpr string_t() noexcept
size_t find_first_of(const arec_t &&ch) const noexcept(find_nothrow)
size_t length() const noexcept
size_t find_first_of(constexpr_str_t &str) const noexcept(find_nothrow)
constexpr auto operator==(constexpr_str_t &a) const noexcept(equal.nothrow< char_T >)
constexpr bool starts_with(const char_T *str) const noexcept
size_t find(string_view_t str, size_t begin=0) const noexcept(find_nothrow)
iterator get_iterator_at(ptrdiff_t index) noexcept
friend string_t operator+(char_T ch, const string_t &str) noexcept
reverse_const_iterator rcbegin() const noexcept
friend string_t operator+(const char_T *str1, const string_t &str2) noexcept
size_t reverse_find(const string_t &str) const noexcept(find_nothrow)
base_t_w::string_view_t string_view_t
size_t find(constexpr_str_t &str, size_t begin=0) const noexcept(find_nothrow)
const_iterator_t< char_T, const iterator_base_t > const_iterator
size_t find_last_not_of(const string_t &str) const noexcept(find_nothrow)
const floating_arec_t operator[](float_t index) const noexcept
size_t reverse_find(constexpr_str_t &str) const noexcept(find_nothrow)
bool empty() const noexcept
requires ::std::is_arithmetic_v< T > auto operator[](T index) noexcept
const arec_t operator[](size_t index) const noexcept
size_t find_first_of(char_T ch) const noexcept(find_nothrow)
string_t & operator+=(const string_t &str) &noexcept
reverse_const_iterator rbegin() const noexcept
void push_back(char_T ch) &noexcept
constexpr bool contains(char_T ch) const noexcept
string_t(const char_T *str) noexcept
constexpr bool starts_with(char_T ch) const noexcept
string_t(size_t size) noexcept
constexpr auto operator<=>(const string_t &a) const noexcept(compare.nothrow< char_T >)
constexpr bool ends_with(const string_t &str) const noexcept
void insert(size_t pos, const string_t &str) &noexcept
string_t(char_T ch, size_t size) noexcept
void push_front(const string_t &str) &noexcept
size_t find_first_of(const char_T *str) const noexcept(find_nothrow)
void push_back(const char_T *str) &noexcept
auto view() const &noexcept
size_t reverse_find(string_view_t str) const noexcept(find_nothrow)
string_t< char_T > this_t
const_iterator end() const noexcept
reverse_const_iterator get_reverse_iterator_at(ptrdiff_t index) const noexcept
size_t find_first_not_of(const string_t &str) const noexcept(find_nothrow)
size_t find_first_not_of(string_view_t str) const noexcept(find_nothrow)
constexpr bool starts_with(const string_t &str) const noexcept
string_t(string_t &&str) noexcept
string_t && operator+(U &&b) &&noexcept(noexcept((*this+=b)))
constexpr bool contains(const char_T *str) const noexcept
void push_back(const string_t &str) &noexcept
iterator_t< char_T, iterator_base_t > iterator
constexpr auto operator<=>(constexpr_str_t &a) const noexcept(compare.nothrow< char_T >)
size_t find_first_not_of(constexpr_str_t &str) const noexcept(find_nothrow)
reverse_const_iterator rend() const noexcept
void insert(size_t pos, const char_T *str) &noexcept
arec_t operator[](size_t index) noexcept
constexpr bool contains(string_view_t str) const noexcept
string_t pop_front(size_t size) noexcept
const arec_t back() const noexcept
void insert(size_t pos, string_view_t str) &noexcept
iterator begin() noexcept
char_T * writeable_c_str() noexcept
size_t find_last_of(string_view_t str) const noexcept(find_nothrow)
string_t(size_t size, char_T ch) noexcept
floating_arec_t operator[](float_t index) noexcept
size_t find_first_not_of(const arec_t &&ch) const noexcept(find_nothrow)
base_string_data_t< char_T > base_t_w
string_t arec(size_t index, char_T delimiter) const
void erase(size_t pos, size_t size=1) &noexcept
reverse_iterator rbegin() noexcept
void resize(size_t nsize, char_T ch) noexcept
string_t operator+(const arec_t &&ch) const noexcept
constexpr bool contains(constexpr_str_t &str) const noexcept
string_t arec(size_t index, const string_t &delimiter_str) const
void push_front(const char_T *str) &noexcept
size_t find_first_of(string_view_t str) const noexcept(find_nothrow)
size_t find_last_not_of(char_T ch) const noexcept(find_nothrow)
string_t & operator+=(const arec_t &&ch) &noexcept
char_T arec(size_t index) noexcept
string_t substr(size_t begin, size_t size=npos) const noexcept
const constexpr_str_t< char_T > constexpr_str_t
void swap_with(this_t &a) noexcept
string_t pop_back(size_t size) noexcept
void insert(size_t pos, char_T ch) &noexcept
reverse_const_iterator rcend() const noexcept
string_t arec(size_t index, string_view_t delimiter_str) const
requires ::std::is_arithmetic_v< T > const auto operator[](T index) const noexcept
size_t find_last_not_of(string_view_t str) const noexcept(find_nothrow)
string_t & operator+=(char_T ch) &noexcept
size_t find_last_of(const char_T *str) const noexcept(find_nothrow)
size_t find_last_not_of(constexpr_str_t &str) const noexcept(find_nothrow)
constexpr auto operator==(string_view_t a) const noexcept(equal.nothrow< char_T >)
constexpr bool contains(const string_t &str) const noexcept
char_T pop_back() noexcept
void push_back(const arec_t &&ch) &noexcept
const_iterator get_iterator_at(ptrdiff_t index) const noexcept
void push_back(string_view_t str) &noexcept
string_t & operator+=(const char_T *str) &noexcept
constexpr bool ends_with(char_T ch) const noexcept
constexpr bool ends_with(string_view_t str) const noexcept
size_t find_first_not_of(const char_T *str) const noexcept(find_nothrow)
constexpr bool starts_with(string_view_t str) const noexcept
const_iterator begin() const noexcept
string_t operator+(const char_T *str) const noexcept
string_t operator+(string_view_t str) const noexcept
void push_front(char_T ch) &noexcept
string_t(const string_t &str) noexcept
size_t find_last_of(char_T ch) const noexcept(find_nothrow)
const char_T * c_str() const noexcept
size_t find(const char_T ch, size_t begin=0) const noexcept(find_nothrow)
auto to_string_view_t() const &noexcept
const_iterator cend() const noexcept
reverse_iterator rend() noexcept
friend string_t operator+(string_view_t str1, const string_t &str2) noexcept
constexpr string_t(char_T ch) noexcept
reverse_iterator get_reverse_iterator_at(ptrdiff_t index) noexcept
constexpr string_t & operator=(char_T ch) noexcept
constexpr auto operator==(const string_t &a) const noexcept(equal.nothrow< char_T >)
constexpr string_t(constexpr_str_t &str) noexcept
size_t find_last_not_of(const char_T *str) const noexcept(find_nothrow)
reverse_const_iterator_t< char_T, const iterator_base_t > reverse_const_iterator
constexpr string_t & operator=(constexpr_str_t &str) noexcept